Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package myrlyn for openSUSE:Leap:16.0 checked in at 2025-07-10 05:44:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Leap:16.0/myrlyn (Old) and /work/SRC/openSUSE:Leap:16.0/.myrlyn.new.7373 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "myrlyn" Thu Jul 10 05:44:32 2025 rev:5 rq:1291528 version:0.9.7 Changes: -------- --- /work/SRC/openSUSE:Leap:16.0/myrlyn/myrlyn.changes 2025-06-18 10:29:22.613166572 +0200 +++ /work/SRC/openSUSE:Leap:16.0/.myrlyn.new.7373/myrlyn.changes 2025-07-10 05:44:37.899913898 +0200 @@ -1,0 +2,19 @@ +Wed Jul 09 09:41:24 UTC 2025 - shundham...@suse.com + +- Update to version 0.9.7: + * Version bump to 0.9.7 + * Override exclude filters when searching for -devel / -debug* (Closes #105) + * myrlyn-sudo: Build own environment (Closes #102, closes #104) + * Don't use login shell (-i) for sudo to avoid XWayland (#104) + * Keep XDG_RUNTIME_DIR env var (#102) + * Cleaned up whitespace in comments + * Fixed coding style + * Cleaned up .desktop files; myrlyn-xdg-su is now in attic/ + * Added auth method to desktop files + * Support for prompt arg in myrlyn-askpass + * Fixed coding style + * Fixed typo + * New help menu item: Root Authentication + * Backup of .spec and _service + +------------------------------------------------------------------- Old: ---- myrlyn-0.9.6.obscpio New: ---- myrlyn-0.9.7.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ myrlyn.spec ++++++ --- /var/tmp/diff_new_pack.6EezaJ/_old 2025-07-10 05:44:38.211926812 +0200 +++ /var/tmp/diff_new_pack.6EezaJ/_new 2025-07-10 05:44:38.215926977 +0200 @@ -20,7 +20,7 @@ Name: myrlyn # If you change the version here, don't forget ../VERSION.cmake ! # To increase only the last number, use rake version:bump -Version: 0.9.6 +Version: 0.9.7 Release: 0 Summary: Package manager GUI License: GPL-2.0-only ++++++ _service ++++++ --- /var/tmp/diff_new_pack.6EezaJ/_old 2025-07-10 05:44:38.243928137 +0200 +++ /var/tmp/diff_new_pack.6EezaJ/_new 2025-07-10 05:44:38.243928137 +0200 @@ -7,7 +7,7 @@ <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param> <param name="versionrewrite-pattern">(.*)\+0</param> <param name="versionrewrite-replacement">\1</param> - <param name="revision">0.9.6</param> + <param name="revision">0.9.7</param> <param name="changesgenerate">enable</param> </service> <service name="set_version" mode="manual"/> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.6EezaJ/_old 2025-07-10 05:44:38.267929130 +0200 +++ /var/tmp/diff_new_pack.6EezaJ/_new 2025-07-10 05:44:38.271929295 +0200 @@ -3,6 +3,6 @@ <param name="url">https://github.com/shundhammer/yqpkg.git</param> <param name="changesrevision">ca8bd11aa2729b40fa14e5e7131f3e7506962260</param></service><service name="tar_scm"> <param name="url">https://github.com/shundhammer/myrlyn.git</param> - <param name="changesrevision">90378c9bd949f8b595704df2e55531c741d85d8e</param></service></servicedata> + <param name="changesrevision">1cfa079e67f1c9820e0b402daa713d98e0677c4a</param></service></servicedata> (No newline at EOF) ++++++ myrlyn-0.9.6.obscpio -> myrlyn-0.9.7.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/VERSION.cmake new/myrlyn-0.9.7/VERSION.cmake --- old/myrlyn-0.9.6/VERSION.cmake 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/VERSION.cmake 2025-07-09 11:35:59.000000000 +0200 @@ -1,4 +1,4 @@ SET( VERSION_MAJOR "0") SET( VERSION_MINOR "9" ) -SET( VERSION_PATCH "6" ) +SET( VERSION_PATCH "7" ) SET( VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/aux/myrlyn-askpass.cc new/myrlyn-0.9.7/aux/myrlyn-askpass.cc --- old/myrlyn-0.9.6/aux/myrlyn-askpass.cc 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/aux/myrlyn-askpass.cc 2025-07-09 11:35:59.000000000 +0200 @@ -14,7 +14,7 @@ */ -#include <iostream> // cerr +#include <iostream> // cout #include <QApplication> #include <QString> @@ -22,20 +22,24 @@ #include "myrlyn-askpass.h" -AskPassWin::AskPassWin() +AskPassWin::AskPassWin( const QString & prompt ) : QDialog() , ui( new Ui::MyrlynAskPassWin ) + , _prompt( prompt ) { ui->setupUi( this ); // Actually create the widgets from the .ui form - QString userName = qgetenv( "USER" ); - - if ( ! userName.isEmpty() ) + if ( _prompt.isEmpty() ) { - QString msg = tr( "Password for %1:" ).arg( userName ); - ui->passwordLabel->setText( msg ); + QString userName = qgetenv( "USER" ); + + if ( ! userName.isEmpty() ) + _prompt = tr( "Password for %1:" ).arg( userName ); } + if ( ! _prompt.isEmpty() ) + ui->passwordLabel->setText( _prompt ); + ui->passwordLineEdit->setFocus(); } @@ -48,9 +52,25 @@ int main( int argc, char *argv[] ) { - QApplication qtApp( argc, argv); + QApplication qtApp( argc, argv ); + QStringList argList = qtApp.arguments(); + argList.removeFirst(); // Remove the program name + QString prompt; + + // 'sudo' calls this with one of + // "[sudo] password for root" + // "[sudo] password for kilroy" + + if ( ! argList.isEmpty() ) + { + prompt = argList.first(); + prompt.replace( "[sudo] ", "" ); + + if ( prompt.startsWith( "password" ) ) + prompt.front() = 'P'; // toUpper() doesn't work here (?!) + } - AskPassWin dialog; + AskPassWin dialog( prompt ); dialog.exec(); if ( dialog.result() == QDialog::Accepted ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/aux/myrlyn-askpass.h new/myrlyn-0.9.7/aux/myrlyn-askpass.h --- old/myrlyn-0.9.6/aux/myrlyn-askpass.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/aux/myrlyn-askpass.h 2025-07-09 11:35:59.000000000 +0200 @@ -32,10 +32,14 @@ public: - AskPassWin(); + AskPassWin( const QString & prompt = QString() ); virtual ~AskPassWin(); Ui::MyrlynAskPassWin * ui; + +protected: + + QString _prompt; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/package/_service new/myrlyn-0.9.7/package/_service --- old/myrlyn-0.9.6/package/_service 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/package/_service 2025-07-09 11:35:59.000000000 +0200 @@ -7,7 +7,7 @@ <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param> <param name="versionrewrite-pattern">(.*)\+0</param> <param name="versionrewrite-replacement">\1</param> - <param name="revision">0.9.5</param> + <param name="revision">0.9.7</param> <param name="changesgenerate">enable</param> </service> <service name="set_version" mode="manual"/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/package/myrlyn.spec new/myrlyn-0.9.7/package/myrlyn.spec --- old/myrlyn-0.9.6/package/myrlyn.spec 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/package/myrlyn.spec 2025-07-09 11:35:59.000000000 +0200 @@ -20,7 +20,7 @@ Name: myrlyn # If you change the version here, don't forget ../VERSION.cmake ! # To increase only the last number, use rake version:bump -Version: 0.9.5 +Version: 0.9.7 Release: 0 Summary: Package manager GUI License: GPL-2.0-only @@ -47,7 +47,8 @@ BuildRequires: gcc BuildRequires: gcc-c++ %endif -Requires: xdg-utils +# Only needed for using the 'myrlyn-xdg-su.desktop' file +Recommends: xdg-utils # Obsolete accidential release because of a wrong tag on GitHub (9.0.1 instead of 0.9.1) Obsoletes: myrlyn = 9.0.1 @@ -87,6 +88,8 @@ %doc README.md %license LICENSE %{_bindir}/myrlyn +%{_bindir}/myrlyn-askpass +%{_bindir}/myrlyn-sudo %{_datadir}/applications/%{name}-*.desktop %{_datadir}/icons/hicolor/*/apps/Myrlyn.png diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/CMakeLists.txt new/myrlyn-0.9.7/src/CMakeLists.txt --- old/myrlyn-0.9.6/src/CMakeLists.txt 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/CMakeLists.txt 2025-07-09 11:35:59.000000000 +0200 @@ -227,10 +227,11 @@ # .desktop files -> /usr/share/applications install( FILES myrlyn-sudo.desktop - myrlyn-xdg-su.desktop myrlyn-user.desktop DESTINATION share/applications ) +# myrlyn-xdg-su.desktop moved to attic/ + # # Install Program icons (artwork) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/FSize.h new/myrlyn-0.9.7/src/FSize.h --- old/myrlyn-0.9.6/src/FSize.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/FSize.h 2025-07-09 11:35:59.000000000 +0200 @@ -107,7 +107,7 @@ * Construct from size in certain unit. * E.g. <code>FSize( 1, FSize::Unit::K )<code> makes 1024 Byte. **/ - FSize( const boost::multiprecision::cpp_int &size_r = 0, const Unit unit_r = Unit::B) + FSize( const boost::multiprecision::cpp_int &size_r = 0, const Unit unit_r = Unit::B ) : _size( boost::multiprecision::cpp_int(size_r) * factor( unit_r ) ) {} @@ -148,7 +148,7 @@ FSize & operator*=( const FSize &rhs ) { _size *= boost::multiprecision::cpp_int(rhs); return *this; } FSize & operator/=( const FSize &rhs ) { _size /= boost::multiprecision::cpp_int(rhs); return *this; } - bool operator<( const FSize &rhs ) const { return _size < boost::multiprecision::cpp_int(rhs); } + bool operator< ( const FSize &rhs ) const { return _size < boost::multiprecision::cpp_int(rhs); } bool operator==( const FSize &rhs ) const { return _size == boost::multiprecision::cpp_int(rhs); } // ++operator (the prefix variant) @@ -159,12 +159,12 @@ /** * Adjust size to multiple of <code>blocksize_r</code> **/ - FSize & fillBlock( FSize blocksize_r = boost::multiprecision::cpp_int(KB) ); + FSize & fillBlock( FSize blocksize_r = boost::multiprecision::cpp_int( KB ) ); /** * Return a new size adjusted to multiple of <code>blocksize_r</code> **/ - FSize fullBlock( FSize blocksize_r = boost::multiprecision::cpp_int(KB) ) const + FSize fullBlock( FSize blocksize_r = boost::multiprecision::cpp_int( KB ) ) const { FSize ret( _size ); return ret.fillBlock( blocksize_r ); @@ -196,7 +196,8 @@ /** * Return string representation in bestUnit. **/ - std::string form( unsigned fw = 0, unsigned prec = bestPrec, bool showunit = true ) const { + std::string form( unsigned fw = 0, unsigned prec = bestPrec, bool showunit = true ) const + { return form( bestUnit(), fw, prec, showunit ); } @@ -207,7 +208,7 @@ }; // stream operators -std::ostream& operator<<(std::ostream &ostr, const FSize&); -std::ostream& operator<<(std::ostream &ostr, const FSize::Unit); +std::ostream & operator<<(std::ostream &ostr, const FSize&); +std::ostream & operator<<(std::ostream &ostr, const FSize::Unit); #endif // _FSize_h_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/QY2DiskUsageList.cc new/myrlyn-0.9.7/src/QY2DiskUsageList.cc --- old/myrlyn-0.9.6/src/QY2DiskUsageList.cc 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/QY2DiskUsageList.cc 2025-07-09 11:35:59.000000000 +0200 @@ -84,7 +84,7 @@ /** - * Interpolate ( in the HSV color space ) a color between 'minColor' and + * Interpolate (in the HSV color space) a color between 'minColor' and * 'maxColor' for a current value 'val' so that 'minVal' corresponds to * 'minColor' and 'maxVal' to 'maxColor'. * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/QY2DiskUsageList.h new/myrlyn-0.9.7/src/QY2DiskUsageList.h --- old/myrlyn-0.9.6/src/QY2DiskUsageList.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/QY2DiskUsageList.h 2025-07-09 11:35:59.000000000 +0200 @@ -73,7 +73,7 @@ /** - * Abstract base class for one partition ( mount point ) to display in a + * Abstract base class for one partition (mount point) to display in a * QY2DiskUsageList. * * This class contains pure virtuals, so it cannot be used directly. @@ -117,14 +117,14 @@ /** * The current free size of this partition. * - * Derived classes can choose reimpmenent this if it is less expensive than - * calculating this value each time from usedSize() and totalSize() which - * is the default implementation. + * Derived classes can choose to reimpmenent this if it is less expensive + * than calculating this value each time from usedSize() and totalSize() + * which is the default implementation. **/ virtual FSize freeSize() const; /** - * The currently used percentage ( 0..100 ) of this partition. + * The currently used percentage (0..100) of this partition. * * Derived classes can choose reimpmenent this if it is less expensive than * calculating this value each time from usedSize() and totalSize() which @@ -134,8 +134,8 @@ /** * The name to display for this partition. - * It makes most sense to use the mount point here ( but this is not a - * requirement ). This is what will be displayed in the "Name" column. + * It makes most sense to use the mount point here (but this is not a + * requirement). This is what will be displayed in the "Name" column. * * Derived classes need to implement this method. **/ @@ -151,7 +151,7 @@ /** - * Update this item's status ( here: the numeric fields ). + * Update this item's status (here: the numeric fields). * Triggered by QY2ListView::updateAllItemStates(). * * Reimplemented from QY2ListViewItem. @@ -195,8 +195,8 @@ protected: /** - * ( Re- ) initialize fields - all displayed fields ( if 'allFields' is - * 'true' ) or only the varying fields ( used, free, percentage ). + * (Re-) initialize fields - all displayed fields (if 'allFields' is + * 'true') or only the varying fields (used, free, percentage). **/ void init( bool allFields ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgChangesDialog.h new/myrlyn-0.9.7/src/YQPkgChangesDialog.h --- old/myrlyn-0.9.6/src/YQPkgChangesDialog.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgChangesDialog.h 2025-07-09 11:35:59.000000000 +0200 @@ -145,7 +145,7 @@ /** * Constructor: Creates a changes dialog with text 'message' on * top, a list packages with an "auto" status that is not set via selections - * and one ( default ) or two buttons. + * and one (default) or two buttons. * * Not meant for public use. Applications should use the static * 'showChangesDialog' method instead. @@ -160,16 +160,16 @@ /** * Apply the filter criteria: Fill the pkg list with pkgs that have a - * "modify" status ( install, update, delete ) set by automatic ( i.e. via the - * dependency solver ), by application ( i.e. via software selections ) or + * "modify" status (install, update, delete) set by automatic (i.e. via the + * dependency solver), by application (i.e. via software selections) or * manually by the user. **/ void filter( Filters flt = FilterAutomatic ); /** * Apply the filter criteria: Fill the pkg list with pkgs that have a - * "modify" status ( install, update, delete ) set by automatic ( i.e. via the - * dependency solver ), by application ( i.e. via software selections ) or + * "modify" status (install, update, delete) set by automatic (i.e. via the + * dependency solver), by application (i.e. via software selections) or * manually by the user and whose name matches 'regexp'. **/ void filter( const QRegularExpression & regexp, Filters flt = FilterAutomatic ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgDependenciesView.h new/myrlyn-0.9.7/src/YQPkgDependenciesView.h --- old/myrlyn-0.9.6/src/YQPkgDependenciesView.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgDependenciesView.h 2025-07-09 11:35:59.000000000 +0200 @@ -25,9 +25,9 @@ /** - * Display technical details ( very much like 'rpm -qi' ) for a zypp::Package - * object - the installed instance, the candidate instance or both ( in two - * columns ) if both exist. All other available instances are ignored. + * Display technical details (very much like 'rpm -qi') for a zypp::Package + * object - the installed instance, the candidate instance or both (in two + * columns) if both exist. All other available instances are ignored. **/ class YQPkgDependenciesView : public YQPkgGenericDetailsView { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgDiskUsageList.cc new/myrlyn-0.9.7/src/YQPkgDiskUsageList.cc --- old/myrlyn-0.9.6/src/YQPkgDiskUsageList.cc 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgDiskUsageList.cc 2025-07-09 11:35:59.000000000 +0200 @@ -102,7 +102,7 @@ for ( const ZyppPartitionDu & partitionDu: diskUsage ) { - YQPkgDiskUsageListItem * item = _items[ QString::fromUtf8(partitionDu.dir.c_str()) ]; + YQPkgDiskUsageListItem * item = _items[ QString::fromUtf8( partitionDu.dir.c_str() ) ]; if ( item ) item->updateDuData( partitionDu ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgDiskUsageList.h new/myrlyn-0.9.7/src/YQPkgDiskUsageList.h --- old/myrlyn-0.9.6/src/YQPkgDiskUsageList.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgDiskUsageList.h 2025-07-09 11:35:59.000000000 +0200 @@ -50,7 +50,7 @@ * * The net effect of all that is to avoid posting the warning over and over * again while the value changes back and forth around the boundary of the - * ( inner ) warning range. + * (inner) warning range. **/ class YQPkgWarningRangeNotifier { @@ -87,7 +87,7 @@ /** * Check if a warning should be posted, i.e. if the value is currently in - * range ( see 'inRange() ) and there has been no notification yet that a + * range (see 'inRange()) and there has been no notification yet that a * warning has already been posted. **/ bool needWarning() const; @@ -134,7 +134,7 @@ * * 'thresholdPercent' can be used to include only partitions with at least * this many percent used disk space in the list. This is useful for - * warning dialogs ( only? ). + * warning dialogs (only?). **/ YQPkgDiskUsageList( QWidget * parent, int thresholdPercent = 0 ); @@ -236,7 +236,7 @@ virtual FSize totalSize() const override; /** - * The name to display for this partition ( the mount point ). + * The name to display for this partition (the mount point). * * Reimplemented from QY2DiskUsageListItem. **/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgDiskUsageWarningDialog.h new/myrlyn-0.9.7/src/YQPkgDiskUsageWarningDialog.h --- old/myrlyn-0.9.6/src/YQPkgDiskUsageWarningDialog.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgDiskUsageWarningDialog.h 2025-07-09 11:35:59.000000000 +0200 @@ -31,11 +31,11 @@ /** * Static convenience method: Post a disk usage warning with text * 'message', a list of partitions that are at least 'thresholdPercent' - * full and one ( default ) or two buttons. + * full and one (default) or two buttons. * - * Returns 'true' if the user accepted ( i.e. clicked the 'accept' button ) - * and 'false' if the user rejected ( i.e. clicked the 'reject' button or - * the window manager close button ). + * Returns 'true' if the user accepted (i.e. clicked the 'accept' button) + * and 'false' if the user rejected (i.e. clicked the 'reject' button or + * the window manager close button). **/ static bool diskUsageWarning( const QString & message, int thresholdPercent, @@ -46,7 +46,7 @@ /** * Constructor: Creates a disk usage warning dialog with text 'message' on * top, a list of partitions that are at least 'thresholdPercent' full and - * one ( default ) or two buttons. + * one (default) or two buttons. * * Not meant for public use. Applications should use the static * 'diskUsageWarning' method instead. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgGenericDetailsView.h new/myrlyn-0.9.7/src/YQPkgGenericDetailsView.h --- old/myrlyn-0.9.6/src/YQPkgGenericDetailsView.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgGenericDetailsView.h 2025-07-09 11:35:59.000000000 +0200 @@ -116,7 +116,7 @@ /** * Show details for the specified package. - * Delayed ( optimized ) display if this is embedded into a QTabWidget + * Delayed (optimized) display if this is embedded into a QTabWidget * parent: In this case, wait until this page becomes visible. **/ void showDetailsIfVisible( ZyppSel selectable ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgObjList.cc new/myrlyn-0.9.7/src/YQPkgObjList.cc --- old/myrlyn-0.9.6/src/YQPkgObjList.cc 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgObjList.cc 2025-07-09 11:35:59.000000000 +0200 @@ -1413,6 +1413,9 @@ _excluded = excl; } + + + YQPkgObjList::ExcludeRule::ExcludeRule( YQPkgObjList * parent, const QRegularExpression & regexp, int column ) @@ -1420,6 +1423,7 @@ , _regexp( regexp ) , _column( column ) , _enabled( true ) + , _savedEnabled( true ) { _parent->addExcludeRule( this ); } @@ -1438,6 +1442,21 @@ } +void +YQPkgObjList::ExcludeRule::overrideEnabled( bool enable ) +{ + _savedEnabled = _enabled; + _enabled = enable; +} + + +void +YQPkgObjList::ExcludeRule::restoreEnabled() +{ + _enabled = _savedEnabled; +} + + void YQPkgObjList::ExcludeRule::setRegexp( const QRegularExpression & regexp ) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgObjList.h new/myrlyn-0.9.7/src/YQPkgObjList.h --- old/myrlyn-0.9.6/src/YQPkgObjList.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgObjList.h 2025-07-09 11:35:59.000000000 +0200 @@ -216,7 +216,7 @@ virtual void resetContent(); /** - * Update the internal actions for the currently selected item ( if any ). + * Update the internal actions for the currently selected item (if any). * This only calls updateActions( YQPkgObjListItem * ) with the currently * selected item as argument, so there is normally no need to reimplement * this method, too, if the other one is reimplemented. @@ -652,7 +652,7 @@ /** * Set a column text via STL string. - * ( QListViewItem::setText() expects a QString! ) + * (QListViewItem::setText() expects a QString!) **/ void setText( int column, const string & text ); @@ -722,6 +722,18 @@ bool isEnabled() const { return _enabled; } /** + * Override the enabled state temporarily. + * Use 'restoreEnabled() to restore the previous state. + **/ + void overrideEnabled( bool enable ); + + /** + * Restore the enabled state to what it was before the last + * 'overrideEnabled()' call. + **/ + void restoreEnabled(); + + /** * Change the regular expression after creation. **/ void setRegexp( const QRegularExpression & regexp ); @@ -759,6 +771,7 @@ QRegularExpression _regexp; int _column; bool _enabled; + bool _savedEnabled; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgSearchFilterView.cc new/myrlyn-0.9.7/src/YQPkgSearchFilterView.cc --- old/myrlyn-0.9.6/src/YQPkgSearchFilterView.cc 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgSearchFilterView.cc 2025-07-09 11:35:59.000000000 +0200 @@ -33,6 +33,7 @@ #include "SearchFilter.h" #include "YQi18n.h" #include "utf8.h" +#include "YQPkgObjList.h" #include "YQPkgSelector.h" #include "YQPkgSearchFilterView.h" @@ -206,6 +207,59 @@ void YQPkgSearchFilterView::filter() { + bool overrideExcludeRuleDevel = false; + bool overrideExcludeRuleDebugInfo = false; + QString searchText = _ui->searchText->text().toLower(); + + if ( searchText.contains( "-devel" ) ) + { + YQPkgObjList::ExcludeRule * excludeRule = + YQPkgSelector::instance()->excludeRuleDevelPkgs(); + + if ( excludeRule ) + { + logInfo() << "Overriding -devel exclude rule" << endl; + + excludeRule->overrideEnabled( false ); + overrideExcludeRuleDevel = true; + } + } + + if ( searchText.contains( "-debuginfo" ) || + searchText.contains( "-debugsource" ) || + searchText.contains( "-debug*" ) ) + { + YQPkgObjList::ExcludeRule * excludeRule = + YQPkgSelector::instance()->excludeRuleDebugInfoPkgs(); + + if ( excludeRule ) + { + logInfo() << "Overriding -debuginfo / -debugsource exclude rule" << endl; + + excludeRule->overrideEnabled( false ); + overrideExcludeRuleDebugInfo = true; + } + } + + filterInternal(); + + if ( overrideExcludeRuleDevel ) + { + logInfo() << "Restoring -devel exclude rule" << endl; + YQPkgSelector::instance()->excludeRuleDevelPkgs()->restoreEnabled(); + } + + if ( overrideExcludeRuleDebugInfo ) + { + logDebug() << "Restoring -debuginfo / -debugsource exclude rule" << endl; + YQPkgSelector::instance()->excludeRuleDebugInfoPkgs()->restoreEnabled(); + } +} + + +void +YQPkgSearchFilterView::filterInternal() +{ #if VERBOSE_FILTER_VIEWS logVerbose() << "Filtering" << endl; #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgSearchFilterView.h new/myrlyn-0.9.7/src/YQPkgSearchFilterView.h --- old/myrlyn-0.9.6/src/YQPkgSearchFilterView.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgSearchFilterView.h 2025-07-09 11:35:59.000000000 +0200 @@ -143,6 +143,11 @@ protected: /** + * The filtering without overriding and restoring any exclude rules. + **/ + void filterInternal(); + + /** * Build a SearchFilter object from the widgets. **/ SearchFilter buildSearchFilterFromWidgets(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgSelector.cc new/myrlyn-0.9.7/src/YQPkgSelector.cc --- old/myrlyn-0.9.6/src/YQPkgSelector.cc 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgSelector.cc 2025-07-09 11:35:59.000000000 +0200 @@ -868,12 +868,22 @@ // Note: The help functions and their texts are moved out // to a separate source file YQPkgSelHelp.cc - // Menu entry for help overview - helpMenu->addAction( _( "&Overview" ), this, SLOT( help() ) ); + // Opening a hyperlink in the user's Internet browser is only supported + // if not running via sudo or xdg-su + bool canOpenInBrowser = ( geteuid() != 0 ); + + if ( canOpenInBrowser ) + helpMenu->addAction( _( "&Overview" ), this, SLOT( help() ) ); + helpMenu->addAction( _( "About &Myrlyn" ), this, SLOT( about() ) ); helpMenu->addAction( _( "About &Qt" ), qApp, SLOT( aboutQt() ) ); - helpMenu->addSeparator(); - helpMenu->addAction( _( "Rep&ository Configuration" ), this, SLOT( helpRepoConfig() ) ); + + if ( canOpenInBrowser ) + { + helpMenu->addSeparator(); + helpMenu->addAction( _( "Rep&ository Configuration" ), this, SLOT( helpRepoConfig() ) ); + helpMenu->addAction( _( "Root &Authentication" ), this, SLOT( helpRootAuth() ) ); + } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgSelector.h new/myrlyn-0.9.7/src/YQPkgSelector.h --- old/myrlyn-0.9.6/src/YQPkgSelector.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgSelector.h 2025-07-09 11:35:59.000000000 +0200 @@ -78,6 +78,17 @@ **/ YQPkgList * pkgList() const { return _pkgList; } + /** + * Return the exclude rule for "-devel" packages. + **/ + YQPkgObjList::ExcludeRule * excludeRuleDevelPkgs() const { return _excludeDevelPkgs; } + + /** + * Return the exclude rule for "-debuginfo / -debugsource" packages. + **/ + YQPkgObjList::ExcludeRule * excludeRuleDebugInfoPkgs() const { return _excludeDebugInfoPkgs; } + + public slots: @@ -176,6 +187,12 @@ void helpRepoConfig(); /** + * Help about root authentication + * (opens in external web browser) + **/ + void helpRootAuth(); + + /** * Display an about page. **/ void about(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgSelectorHelp.cc new/myrlyn-0.9.7/src/YQPkgSelectorHelp.cc --- old/myrlyn-0.9.6/src/YQPkgSelectorHelp.cc 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgSelectorHelp.cc 2025-07-09 11:35:59.000000000 +0200 @@ -35,6 +35,12 @@ } +void YQPkgSelector::helpRootAuth() +{ + openInBrowser( "https://github.com/shundhammer/myrlyn/issues/99" ); +} + + void YQPkgSelector::about() { QDialog aboutDialog( this ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgTechnicalDetailsView.h new/myrlyn-0.9.7/src/YQPkgTechnicalDetailsView.h --- old/myrlyn-0.9.6/src/YQPkgTechnicalDetailsView.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgTechnicalDetailsView.h 2025-07-09 11:35:59.000000000 +0200 @@ -23,8 +23,8 @@ /** * Display technical details (very much like 'rpm -qi') for a ZYPP - * object - the installed instance, the candidate instance or both ( in two - * columns ) if both exist. All other available instances are ignored. + * object - the installed instance, the candidate instance or both (in two + * columns) if both exist. All other available instances are ignored. **/ class YQPkgTechnicalDetailsView : public YQPkgGenericDetailsView { @@ -65,7 +65,7 @@ /** * Returns a string containing a HTML table for technical details for two * package instances: The installed instance and an alternate instance. - * ( usually the candidate instance ). + * (usually the candidate instance). **/ QString complexTable( ZyppSel selectable, ZyppPkg installedPkg, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgTextDialog.h new/myrlyn-0.9.7/src/YQPkgTextDialog.h --- old/myrlyn-0.9.6/src/YQPkgTextDialog.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgTextDialog.h 2025-07-09 11:35:59.000000000 +0200 @@ -128,10 +128,10 @@ static QString htmlHeading( ZyppSel selectable ); /** - * Escapes characters special to HTML in a ( plain text ) string, such as: - * '<' -> '<' - * '>' -> '>' - * '&' -> '&' + * Escapes characters special to HTML in a (plain text) string, such as: + * '<' -> '<' + * '>' -> '>' + * '&' -> '&' * * Returns the escaped string. **/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/YQPkgVersionsView.h new/myrlyn-0.9.7/src/YQPkgVersionsView.h --- old/myrlyn-0.9.6/src/YQPkgVersionsView.h 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/YQPkgVersionsView.h 2025-07-09 11:35:59.000000000 +0200 @@ -105,7 +105,7 @@ /** * Show details for the specified package. - * Delayed ( optimized ) display if this is embedded into a QTabWidget + * Delayed (optimized) display if this is embedded into a QTabWidget * parent: In this case, wait until this page becomes visible. **/ void showDetailsIfVisible( ZyppSel selectable ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/attic/myrlyn-askpass new/myrlyn-0.9.7/src/attic/myrlyn-askpass --- old/myrlyn-0.9.6/src/attic/myrlyn-askpass 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/attic/myrlyn-askpass 1970-01-01 01:00:00.000000000 +0100 @@ -1,24 +0,0 @@ -#!/bin/bash -# -# Wrapper around the (graphical!) ssh-askpass with a meaningful prompt -# to tell the user which password should be entered. -# -# The default is "Enter the openSSH passphrase" which is totally confusing -# in the context of Myrlyn. - -ASKPASS_MSG=" Password for user $USER: " -ASKPASS=/usr/libexec/ssh/ssh-askpass - -if [ ! -x $ASKPASS ]; then - # Leap 15.x - ASKPASS=/usr/lib/ssh/ssh-askpass -fi - -if [ ! -x $ASKPASS ]; then - echo "No 'ssh-askpass' found." - echo "Install the openssh-clients package:" - echo " sudo zypper in openssh-clients" - exit 1 -fi - -$ASKPASS $ASKPASS_MSG diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/attic/myrlyn-pkexec new/myrlyn-0.9.7/src/attic/myrlyn-pkexec --- old/myrlyn-0.9.6/src/attic/myrlyn-pkexec 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/attic/myrlyn-pkexec 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -#!/bin/sh - -pkexec env \ - DISPLAY=$DISPLAY \ - WAYLAND_DISPLAY=$WAYLAND_DISPLAY \ - XAUTHORITY=$XAUTHORITY \ - QT_QPA_PLATFORMTHEME=$QT_QPA_PLATFORMTHEME \ - /usr/bin/myrlyn diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/attic/myrlyn-ssh-askpass new/myrlyn-0.9.7/src/attic/myrlyn-ssh-askpass --- old/myrlyn-0.9.6/src/attic/myrlyn-ssh-askpass 1970-01-01 01:00:00.000000000 +0100 +++ new/myrlyn-0.9.7/src/attic/myrlyn-ssh-askpass 2025-07-09 11:35:59.000000000 +0200 @@ -0,0 +1,24 @@ +#!/bin/bash +# +# Wrapper around the (graphical!) ssh-askpass with a meaningful prompt +# to tell the user which password should be entered. +# +# The default is "Enter the openSSH passphrase" which is totally confusing +# in the context of Myrlyn. + +ASKPASS_MSG=" Password for user $USER: " +ASKPASS=/usr/libexec/ssh/ssh-askpass + +if [ ! -x $ASKPASS ]; then + # Leap 15.x + ASKPASS=/usr/lib/ssh/ssh-askpass +fi + +if [ ! -x $ASKPASS ]; then + echo "No 'ssh-askpass' found." + echo "Install the openssh-clients package:" + echo " sudo zypper in openssh-clients" + exit 1 +fi + +$ASKPASS $ASKPASS_MSG diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/attic/myrlyn-xdg-su.desktop new/myrlyn-0.9.7/src/attic/myrlyn-xdg-su.desktop --- old/myrlyn-0.9.6/src/attic/myrlyn-xdg-su.desktop 1970-01-01 01:00:00.000000000 +0100 +++ new/myrlyn-0.9.7/src/attic/myrlyn-xdg-su.desktop 2025-07-09 11:35:59.000000000 +0200 @@ -0,0 +1,11 @@ +[Desktop Entry] +Type=Application +Name=Myrlyn (xdg-su) +Exec=xdg-su -c /usr/bin/myrlyn +Icon=Myrlyn.png +GenericName=Myrlyn Graphical Software Package Manager +Comment=Full root access (via xdg-su / kdesu / gnomesu ) +Terminal=false +MimeType= +Categories=System;Settings +Keywords=software;package panagement;gui diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/main.cc new/myrlyn-0.9.7/src/main.cc --- old/myrlyn-0.9.6/src/main.cc 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/main.cc 2025-07-09 11:35:59.000000000 +0200 @@ -51,7 +51,7 @@ << " --fake-root\n" << " --fake-commit\n" << " --fake-summary\n" - << " --fake-translations (\"xixoxixoxixo\" everwhere)\n" + << " --fake-translations (\"xixoxixoxixo\" everywhere)\n" << " --slow-repo-refresh\n" << "\n" << std::endl; @@ -138,7 +138,7 @@ // Create the QApplication first because it might remove some Qt-specific // command line arguments already - QApplication qtApp( argc, argv); + QApplication qtApp( argc, argv ); QStringList argList = QCoreApplication::arguments(); argList.removeFirst(); // Remove the program name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/myrlyn-sudo new/myrlyn-0.9.7/src/myrlyn-sudo --- old/myrlyn-0.9.6/src/myrlyn-sudo 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/myrlyn-sudo 2025-07-09 11:35:59.000000000 +0200 @@ -3,14 +3,39 @@ # Wrapper around 'sudo' for Myrlyn that can open a graphical password prompt # and that can keep the connection to the display (X11 or Wayland) alive # as well as some well-defined environment variables. +# +# Author: Stefan Hundhammer <stefan.hundham...@gmx.de> +# License: GPL V2 MYRLYN_ARGS=$* # Environment variables to keep for the 'sudo' call -ENV_KEEP="DISPLAY,WAYLAND_DISPLAY,XAUTHORITY,\ -QT_QPA_PLATFORMTHEME,QT_ENABLE_HIGHDPI_SCALING,\ -LANG,LC_MESSAGES,LC_COLLATE,LC_NUMERIC,LC_TIME,LC_ALL,LANGUAGE" +ENV_KEEP="DISPLAY WAYLAND_DISPLAY XAUTHORITY XDG_RUNTIME_DIR \ +QT_QPA_PLATFORMTHEME QT_ENABLE_HIGHDPI_SCALING \ +LANG LC_MESSAGES LC_COLLATE LC_NUMERIC LC_TIME LC_ALL LANGUAGE" + +# Build an environment for use with /usr/bin/env from the above variables: +# DISPLAY=:0.0 LANG=de_DE.utf8 ... + +ENV="" + +for VAR in $ENV_KEEP; do + # Uncomment for debugging + # echo "$VAR=${!VAR}" + ENV="$ENV $VAR=${!VAR}" +done + +# Uncomment for debugging +# echo $ENV + +# Use our own askpass binary to for a graphical password prompt ASKPASS=/usr/bin/myrlyn-askpass -SUDO_ASKPASS=$ASKPASS sudo -Ai --preserve-env=$ENV_KEEP /usr/bin/myrlyn $MYRLYN_ARGS +# Using /usr/bin/env to set up an environment inside the 'sudo' call, +# not relying on what 'env_keep' in /etc/sudoers might allow or not. +# +# The main command that is called here is /usr/bin/env which builds +# the environment and then calls myrlyn with $MYRLYN_ARGS. + +SUDO_ASKPASS=$ASKPASS sudo -A /usr/bin/env $ENV /usr/bin/myrlyn $MYRLYN_ARGS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/myrlyn-sudo.desktop new/myrlyn-0.9.7/src/myrlyn-sudo.desktop --- old/myrlyn-0.9.6/src/myrlyn-sudo.desktop 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/myrlyn-sudo.desktop 2025-07-09 11:35:59.000000000 +0200 @@ -3,7 +3,7 @@ Name=Myrlyn Exec=myrlyn-sudo Icon=Myrlyn.png -GenericName=Myrlyn Graphical Software Package Manager +GenericName=Myrlyn Graphical Software Package Manager (using sudo) Comment=Full root access (via sudo) Terminal=false MimeType= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/myrlyn-0.9.6/src/myrlyn-xdg-su.desktop new/myrlyn-0.9.7/src/myrlyn-xdg-su.desktop --- old/myrlyn-0.9.6/src/myrlyn-xdg-su.desktop 2025-06-17 00:54:43.000000000 +0200 +++ new/myrlyn-0.9.7/src/myrlyn-xdg-su.desktop 1970-01-01 01:00:00.000000000 +0100 @@ -1,11 +0,0 @@ -[Desktop Entry] -Type=Application -Name=Myrlyn -Exec=xdg-su -c /usr/bin/myrlyn -Icon=Myrlyn.png -GenericName=Myrlyn Graphical Software Package Manager -Comment=Full root access (via xdg-su / kdesu / gnomesu ) -Terminal=false -MimeType= -Categories=System;Settings -Keywords=software;package panagement;gui ++++++ myrlyn.obsinfo ++++++ --- /var/tmp/diff_new_pack.6EezaJ/_old 2025-07-10 05:44:38.603943037 +0200 +++ /var/tmp/diff_new_pack.6EezaJ/_new 2025-07-10 05:44:38.607943202 +0200 @@ -1,5 +1,5 @@ name: myrlyn -version: 0.9.6 -mtime: 1750114483 -commit: 90378c9bd949f8b595704df2e55531c741d85d8e +version: 0.9.7 +mtime: 1752053759 +commit: 1cfa079e67f1c9820e0b402daa713d98e0677c4a