Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package xwmfs for openSUSE:Factory checked in at 2025-08-29 18:37:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xwmfs (Old) and /work/SRC/openSUSE:Factory/.xwmfs.new.1977 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xwmfs" Fri Aug 29 18:37:08 2025 rev:8 rq:1301904 version:1.00 Changes: -------- --- /work/SRC/openSUSE:Factory/xwmfs/xwmfs.changes 2022-05-05 23:07:32.129642841 +0200 +++ /work/SRC/openSUSE:Factory/.xwmfs.new.1977/xwmfs.changes 2025-08-29 18:39:09.876192382 +0200 @@ -1,0 +2,12 @@ +Fri Aug 29 10:06:16 UTC 2025 - Matthias Gerstner <matthias.gerst...@suse.com> + +- add explicit pkgconfig(fuse3) build dependency + +------------------------------------------------------------------- +Thu Aug 28 14:06:31 UTC 2025 - Matthias Gerstner <matthias.gerst...@suse.com> + +- update to version v1.00: + * build against libfuse3 (bsc#1242088) + * stability bugfixes + +------------------------------------------------------------------- Old: ---- xwmfs-0.91-dist.tar.gz New: ---- xwmfs-1.00-dist.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xwmfs.spec ++++++ --- /var/tmp/diff_new_pack.dZUCJc/_old 2025-08-29 18:39:10.356212767 +0200 +++ /var/tmp/diff_new_pack.dZUCJc/_new 2025-08-29 18:39:10.356212767 +0200 @@ -1,7 +1,7 @@ # # spec file for package xwmfs # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2025 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,11 +19,12 @@ Name: xwmfs BuildRequires: autoconf BuildRequires: automake -BuildRequires: fuse-devel +BuildRequires: fuse3-devel BuildRequires: gcc-c++ BuildRequires: libX11-devel -Requires: fuse -Version: 0.91 +BuildRequires: pkgconfig(fuse3) +Requires: fuse3 +Version: 1.00 Release: 0 URL: https://github.com/gerstner-hub/xwmfs Summary: A file system for accessing X server and window manager features ++++++ xwmfs-0.91-dist.tar.gz -> xwmfs-1.00-dist.tar.gz ++++++ ++++ 20274 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/ChangeLog new/xwmfs-1.00/ChangeLog --- old/xwmfs-0.91/ChangeLog 2022-05-04 19:26:21.000000000 +0200 +++ new/xwmfs-1.00/ChangeLog 2025-08-28 15:32:23.000000000 +0200 @@ -1,3 +1,16 @@ +2025-08-28 Matthias Gerstner <matthias.gerst...@nefkom.net> + + version 1.00 + + - support libfuse3 API + - some bugfixes in the area of race conditions and robustness + +2023-02-16 Matthias Gerstner <matthias.gerst...@nefkom.net> + + version 0.92 + + - Fix linker error occuring with gcc major version 13. + 2022-05-04 Matthias Gerstner <matthias.gerst...@nefkom.net> version 0.91 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/configure.ac new/xwmfs-1.00/configure.ac --- old/xwmfs-0.91/configure.ac 2022-05-04 19:54:32.000000000 +0200 +++ new/xwmfs-1.00/configure.ac 2025-08-28 15:32:23.000000000 +0200 @@ -4,7 +4,7 @@ AC_PREREQ([2.71]) dnl Our wmfs application -AC_INIT([xwmfs],[0.91],[matthias.gerst...@nefkom.net]) +AC_INIT([xwmfs],[1.00],[matthias.gerst...@nefkom.net]) dnl Stores some generated files in a separate directory for cleaner structure AC_CONFIG_AUX_DIR(config_aux) @@ -38,12 +38,12 @@ dnl we need fuse dnl AC_CHECK_LIB([fuse], [fuse_main], [], [AC_MSG_ERROR([You need the fuse userspace library to build this package])]) -PKG_CHECK_MODULES([fuse], [ fuse >= 2.8.1 ]) +PKG_CHECK_MODULES([fuse3], [ fuse3 >= 3.0.0 ]) dnl we also need X11 PKG_CHECK_MODULES([x11], [ x11 >= 1.2.2 ]) -AC_SUBST([fuse_CFLAGS]) -AC_SUBST([fuse_LIBS]) +AC_SUBST([fuse3_CFLAGS]) +AC_SUBST([fuse3_LIBS]) AC_SUBST([x11_CFLAGS]) AC_SUBST([x11_LIBS]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/src/Makefile.am new/xwmfs-1.00/src/Makefile.am --- old/xwmfs-0.91/src/Makefile.am 2022-05-04 19:17:55.000000000 +0200 +++ new/xwmfs-1.00/src/Makefile.am 2025-08-28 15:32:23.000000000 +0200 @@ -32,7 +32,7 @@ # we need x11 and fuse xwmfs_DEPENDENCIES = x11 fuse # makes it possible to include headers from fuse or x11, to select a recent fuse API version -AM_CFLAGS = -DFUSE_USE_VERSION=26 @fuse_CFLAGS@ @x11_CFLAGS@ -I${top_srcdir}/src +AM_CFLAGS = -DFUSE_USE_VERSION=35 @fuse3_CFLAGS@ @x11_CFLAGS@ -I${top_srcdir}/src if DEV AM_CFLAGS += -Wall -Werror -Wextra -Wnull-dereference -Wdouble-promotion -Wshadow -Wformat=2 @@ -48,5 +48,5 @@ # use this instead of AM_LDFLAGS to have the libraries appear AFTER the object # files. Otherwise we get trouble on distros where as-needed linking is # enabled -xwmfs_LDADD = @fuse_LIBS@ @x11_LIBS@ +xwmfs_LDADD = @fuse3_LIBS@ @x11_LIBS@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/src/fuse/Entry.cxx new/xwmfs-1.00/src/fuse/Entry.cxx --- old/xwmfs-0.91/src/fuse/Entry.cxx 2021-03-21 13:02:52.000000000 +0100 +++ new/xwmfs-1.00/src/fuse/Entry.cxx 2025-08-28 15:32:23.000000000 +0200 @@ -72,7 +72,7 @@ return endpos; } -void Entry::getStat(struct stat *s) +void Entry::getStat(struct stat *s) const { s->st_uid = m_uid; s->st_gid = m_gid; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/src/fuse/Entry.hxx new/xwmfs-1.00/src/fuse/Entry.hxx --- old/xwmfs-0.91/src/fuse/Entry.hxx 2021-03-21 13:02:52.000000000 +0100 +++ new/xwmfs-1.00/src/fuse/Entry.hxx 2025-08-28 15:32:23.000000000 +0200 @@ -120,7 +120,7 @@ * Fills in the status information corresponding to this entry * into \c s **/ - virtual void getStat(struct stat *s); + virtual void getStat(struct stat *s) const; //! increases the reference count void ref() { m_refcount++; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/src/fuse/FileEntry.cxx new/xwmfs-1.00/src/fuse/FileEntry.cxx --- old/xwmfs-0.91/src/fuse/FileEntry.cxx 2021-03-21 13:02:52.000000000 +0100 +++ new/xwmfs-1.00/src/fuse/FileEntry.cxx 2025-08-28 15:32:23.000000000 +0200 @@ -8,14 +8,20 @@ namespace xwmfs { -void FileEntry::getStat(struct stat *s) +void FileEntry::getStat(struct stat *s) const { Entry::getStat(s); MutexGuard g(m_parent->getLock()); + /* + * we are modifying the stream position here, but that isn't + * problematic, since we'll always reposition it during read or write. + */ + auto &stream = static_cast<std::stringstream&>(const_cast<FileEntry&>(*this)); + // determine size of stream and return it in stat structure - this->seekg( 0, xwmfs::FileEntry::end ); - s->st_size = this->tellg(); + stream.seekg( 0, xwmfs::FileEntry::end ); + s->st_size = stream.tellg(); } int FileEntry::write(OpenContext *ctx, const char *data, size_t size, off_t offset) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/src/fuse/FileEntry.hxx new/xwmfs-1.00/src/fuse/FileEntry.hxx --- old/xwmfs-0.91/src/fuse/FileEntry.hxx 2021-03-18 12:51:41.000000000 +0100 +++ new/xwmfs-1.00/src/fuse/FileEntry.hxx 2025-08-28 15:32:23.000000000 +0200 @@ -80,7 +80,7 @@ int read(OpenContext *ctx, char *buf, size_t size, off_t offset) override; - void getStat(struct stat*) override; + void getStat(struct stat*) const override; }; } // end ns diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/src/fuse/SymlinkEntry.cxx new/xwmfs-1.00/src/fuse/SymlinkEntry.cxx --- old/xwmfs-0.91/src/fuse/SymlinkEntry.cxx 2021-03-21 13:02:52.000000000 +0100 +++ new/xwmfs-1.00/src/fuse/SymlinkEntry.cxx 2025-08-28 15:32:23.000000000 +0200 @@ -11,7 +11,7 @@ namespace xwmfs { -void SymlinkEntry::getStat(struct stat *s) +void SymlinkEntry::getStat(struct stat *s) const { Entry::getStat(s); MutexGuard g(m_parent->getLock()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/src/fuse/SymlinkEntry.hxx new/xwmfs-1.00/src/fuse/SymlinkEntry.hxx --- old/xwmfs-0.91/src/fuse/SymlinkEntry.hxx 2021-03-21 13:02:52.000000000 +0100 +++ new/xwmfs-1.00/src/fuse/SymlinkEntry.hxx 2025-08-28 15:32:23.000000000 +0200 @@ -25,7 +25,7 @@ m_target = target; } - void getStat(struct stat*) override; + void getStat(struct stat*) const override; virtual int readlink(char *buf, size_t size) override; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/src/fuse/xwmfs_fuse_ops.h new/xwmfs-1.00/src/fuse/xwmfs_fuse_ops.h --- old/xwmfs-0.91/src/fuse/xwmfs_fuse_ops.h 2021-03-21 13:02:52.000000000 +0100 +++ new/xwmfs-1.00/src/fuse/xwmfs_fuse_ops.h 2025-08-28 15:32:23.000000000 +0200 @@ -21,7 +21,8 @@ extern int xwmfs_getattr( const char *path, - struct stat *stbuf + struct stat *stbuf, + struct fuse_file_info *fi ); extern int xwmfs_readdir( @@ -29,7 +30,8 @@ void *buf, fuse_fill_dir_t filler, off_t offset, - struct fuse_file_info *fi + struct fuse_file_info *fi, + enum fuse_readdir_flags flags ); extern int xwmfs_open( @@ -66,11 +68,13 @@ extern int xwmfs_truncate( const char *path, - off_t size + off_t size, + struct fuse_file_info *fi ); extern void* xwmfs_init( - struct fuse_conn_info* + struct fuse_conn_info*, + struct fuse_config* ); extern void xwmfs_destroy( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/src/fuse/xwmfs_fuse_ops_impl.cxx new/xwmfs-1.00/src/fuse/xwmfs_fuse_ops_impl.cxx --- old/xwmfs-0.91/src/fuse/xwmfs_fuse_ops_impl.cxx 2021-03-21 13:02:52.000000000 +0100 +++ new/xwmfs-1.00/src/fuse/xwmfs_fuse_ops_impl.cxx 2025-08-28 15:32:23.000000000 +0200 @@ -26,22 +26,31 @@ xwmfs::RootEntry *filesystem = nullptr; +static OpenContext* context_from_fi(struct fuse_file_info *fi) { + // get our entry pointer back from the file handle field + return reinterpret_cast<xwmfs::OpenContext*>(fi->fh); +} + +static Entry* entry_from_fi(struct fuse_file_info *fi) { + xwmfs::OpenContext *context = context_from_fi(fi); + return context->getEntry(); } +} // end ns + /** * \brief * Get stat information about a file system entry * \details - * stat is done w/o an open context + * stat may happen with or without file open context in `fi`. **/ -int xwmfs_getattr(const char *path, struct stat *stbuf) +int xwmfs_getattr(const char *path, struct stat *stbuf, struct fuse_file_info *fi) { memset(stbuf, 0, sizeof(struct stat)); xwmfs::FileSysReadGuard read_guard( *xwmfs::filesystem ); - xwmfs::Entry *entry = xwmfs::filesystem->findEntry( path ); - - if( ! entry ) + const xwmfs::Entry *entry = fi ? xwmfs::entry_from_fi(fi) : xwmfs::filesystem->findEntry(path); + if( !entry ) { xwmfs::StdLogger::getInstance().debug() << __FUNCTION__ << ": noent for path " @@ -67,7 +76,7 @@ **/ int xwmfs_readdir( const char *path, void *buf, fuse_fill_dir_t filler, - off_t offset, struct fuse_file_info *fi) + off_t offset, struct fuse_file_info *fi, enum fuse_readdir_flags flags) { (void) offset; (void) fi; @@ -108,9 +117,20 @@ // okay we found a valid directory to list the contents of const auto &entries = dir_entry->getEntries(); + /* + * the kernel would like stat information for each entry right away. + */ + const bool provide_stat = (flags & FUSE_READDIR_PLUS) != 0; + const enum fuse_fill_dir_flags fill_flags = provide_stat ? FUSE_FILL_DIR_PLUS : FUSE_FILL_DIR_DEFAULTS; + struct stat stbuf; + for( const auto &it: entries ) { - filler(buf, it.first, nullptr, 0); + if (provide_stat) { + it.second->getStat(&stbuf); + } + + filler(buf, it.first, provide_stat ? &stbuf : nullptr, 0, fill_flags); } return 0; @@ -175,8 +195,7 @@ xwmfs::FileSysReadGuard read_guard( *xwmfs::filesystem ); - // get our entry pointer back from the file handle field - xwmfs::OpenContext *context = reinterpret_cast<xwmfs::OpenContext*>(fi->fh); + auto *context = xwmfs::context_from_fi(fi); auto entry = context->getEntry(); entry->destroyOpenContext(context); @@ -194,7 +213,7 @@ xwmfs::FileSysReadGuard read_guard( *xwmfs::filesystem ); // get our context pointer back from the file handle field - xwmfs::OpenContext *context = reinterpret_cast<xwmfs::OpenContext*>(fi->fh); + auto context = xwmfs::context_from_fi(fi); auto entry = context->getEntry(); try @@ -240,9 +259,7 @@ xwmfs::FileSysReadGuard read_guard( *xwmfs::filesystem ); - // get our context pointer back from the file handle field - xwmfs::OpenContext *context = reinterpret_cast<xwmfs::OpenContext*>(fi->fh); - + auto context = xwmfs::context_from_fi(fi); auto entry = context->getEntry(); try @@ -259,7 +276,7 @@ } } -int xwmfs_truncate(const char *path, off_t size) +int xwmfs_truncate(const char *path, off_t size, struct fuse_file_info *fi) { // do nothing // @@ -272,6 +289,7 @@ // that try to truncate a file upon writing. (void)path; (void)size; + (void)fi; return 0; } @@ -309,10 +327,14 @@ * The returned value is passed to all other operations in the * fuse_context structure and also to xwmfs_destroy(void*) **/ -void* xwmfs_init(struct fuse_conn_info* conn) +void* xwmfs_init(struct fuse_conn_info *conn, struct fuse_config *config) { (void)conn; + // make interruptible the default, this seems to be the only way. + // Otherwise the abort logic for blocking calls is not enabled + config->intr = 1; + try { xwmfs::Xwmfs &xwmfs = xwmfs::Xwmfs::getInstance(); @@ -341,8 +363,8 @@ assert( xwmfs::filesystem ); - // we return our file system instance such that we can access it - // anywhere + // we return our file system instance such that we can access it from + // all contexts. return xwmfs::filesystem; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/src/main/WindowDirEntry.cxx new/xwmfs-1.00/src/main/WindowDirEntry.cxx --- old/xwmfs-0.91/src/main/WindowDirEntry.cxx 2021-03-18 12:49:22.000000000 +0100 +++ new/xwmfs-1.00/src/main/WindowDirEntry.cxx 2025-08-28 15:32:23.000000000 +0200 @@ -30,15 +30,23 @@ addEntry(m_geometry); { XWindowAttrs attrs; - m_win.getAttrs(attrs); - updateGeometry(attrs); + try { + m_win.getAttrs(attrs); + updateGeometry(attrs); + } catch (const X11Exception &ex) { + // window disappeared again? + } } // NOTE: might become a writeable entry, using XReparentWindow(), // pretty obscure though m_parent = new WindowFileEntry("parent", m_win, m_modify_time, false); addEntry(m_parent); - m_win.updateFamily(); + try { + m_win.updateFamily(); + } catch (const X11Exception &ex) { + // window disappeared again? + } updateParent(); if( query_attrs ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/src/main/Xwmfs.cxx new/xwmfs-1.00/src/main/Xwmfs.cxx --- old/xwmfs-0.91/src/main/Xwmfs.cxx 2021-03-21 13:03:41.000000000 +0100 +++ new/xwmfs-1.00/src/main/Xwmfs.cxx 2025-08-28 15:32:23.000000000 +0200 @@ -119,8 +119,6 @@ void Xwmfs::exit() { - m_fs_root.clear(); - if( m_ev_thread.getState() == xwmfs::Thread::RUN ) { m_ev_thread.requestExit(); @@ -136,6 +134,8 @@ // finally join the thread m_ev_thread.join(); } + + m_fs_root.clear(); } int Xwmfs::XErrorHandler(Display *disp, XErrorEvent *error) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/src/main/main.cxx new/xwmfs-1.00/src/main/main.cxx --- old/xwmfs-0.91/src/main/main.cxx 2021-03-18 12:49:30.000000000 +0100 +++ new/xwmfs-1.00/src/main/main.cxx 2025-08-28 15:32:23.000000000 +0200 @@ -120,11 +120,6 @@ print_xwmfs_help = parseXWMFSOptions( argc, argv, fuse_args ); - - // make interruptible the default, this seems to be - // the only way. Otherwise the abort logic for - // blocking calls is not enabled - fuse_opt_add_arg(&fuse_args, "-ointr"); } catch( const xwmfs::Exception &e ) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/src/x11/XWindow.cxx new/xwmfs-1.00/src/x11/XWindow.cxx --- old/xwmfs-0.91/src/x11/XWindow.cxx 2021-03-21 13:03:41.000000000 +0100 +++ new/xwmfs-1.00/src/x11/XWindow.cxx 2025-08-28 15:32:23.000000000 +0200 @@ -651,6 +651,7 @@ template void XWindow::getProperty(const Atom, Property<int>&, const PropertyInfo*) const; template void XWindow::getProperty(const Atom, Property<unsigned long>&, const PropertyInfo*) const; template void XWindow::getProperty(const Atom, Property<const char*>&, const PropertyInfo*) const; +template void XWindow::getProperty(const Atom, Property<utf8_string>&, const PropertyInfo*) const; template void XWindow::getProperty(const Atom, Property<std::vector<XAtom> >&, const PropertyInfo*) const; template void XWindow::getProperty(const Atom, Property<std::vector<unsigned long> >&, const PropertyInfo*) const; template void XWindow::getProperty(const Atom, Property<std::vector<int> >&, const PropertyInfo*) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xwmfs-0.91/tests/base/base.py new/xwmfs-1.00/tests/base/base.py --- old/xwmfs-0.91/tests/base/base.py 2022-05-04 18:36:20.000000000 +0200 +++ new/xwmfs-1.00/tests/base/base.py 2025-08-28 15:27:59.000000000 +0200 @@ -108,6 +108,12 @@ default=None ) + self.m_parser.add_argument( + "-m", "--mount", + help="Existing mount point to use instead of starting a new instance", + default=None + ) + def parseArgs(self): self.m_args = self.m_parser.parse_args() @@ -120,8 +126,6 @@ atexit.register(self._cleanup) self.m_proc = None self.m_test_window = None - self.m_tmp_dir = tempfile.TemporaryDirectory() - self.m_mount_dir = self.m_tmp_dir.name Window.setBase(self) def _cleanup(self): @@ -129,7 +133,8 @@ if self.m_proc: self.m_proc.terminate() self.m_proc.wait() - os.rmdir(self.m_mount_dir) + if self.m_need_mount: + os.rmdir(self.m_mount_dir) if self.m_test_window: self.closeTestWindow() @@ -170,12 +175,12 @@ def mount(self): - self.m_proc = subprocess.Popen( - [ - self.m_xwmfs, "-f", - "--logger={}".format(self.logSetting()), - ] + self.extraSettings() + [self.m_mount_dir] - ) + if not self.m_need_mount: + return + + cmdline = [self.m_xwmfs, "-f", "--logger={}".format(self.logSetting()), ] + self.extraSettings() + [self.m_mount_dir] + print("Mounting via cmdline:", ' '.join(cmdline)) + self.m_proc = subprocess.Popen(cmdline) while len(os.listdir(self.m_mount_dir)) == 0: @@ -189,7 +194,10 @@ def unmount(self): - self.m_proc.terminate() + if not self.m_need_mount: + return + + subprocess.check_call(["fusermount3", "-u", self.m_mount_dir]) res = self.m_proc.wait() self.m_proc = None @@ -214,7 +222,18 @@ return 77 self.parseArgs() - self.m_xwmfs = self.getBinary() + if self.m_args.mount: + self.m_mount_dir = self.m_args.mount + self.m_need_mount = False + if not os.path.isdir(self.m_mount_dir): + printe("specified mount directory is not existing") + sys.exit(1) + else: + self.m_xwmfs = self.getBinary() + self.m_tmp_dir = tempfile.TemporaryDirectory() + self.m_mount_dir = self.m_tmp_dir.name + self.m_need_mount = True + self.mount() self.m_windows = os.path.join(self.m_mount_dir, "windows") self.m_mgr = ManagerDir(os.path.join(self.m_mount_dir, "wm"))