Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package btop for openSUSE:Factory checked in at 2022-11-23 09:48:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/btop (Old) and /work/SRC/openSUSE:Factory/.btop.new.1597 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "btop" Wed Nov 23 09:48:11 2022 rev:23 rq:1037399 version:1.2.13+git20221106.0f8498f Changes: -------- --- /work/SRC/openSUSE:Factory/btop/btop.changes 2022-10-15 16:40:38.910613519 +0200 +++ /work/SRC/openSUSE:Factory/.btop.new.1597/btop.changes 2022-11-23 09:48:33.547183175 +0100 @@ -1,0 +2,45 @@ +Mon Nov 07 14:43:04 UTC 2022 - scott.bradn...@suse.com + +- Update to version 1.2.13+git20221106.0f8498f: + * v1.2.13 Bug fixes + * osx: replace getnameinfo with inet_ntop + * a comment about AF_LINK being ignored on purpose + * FreeBSD: replace getnameinfo with inet_ntop + * Fixed: Process nice value underflowing, issue #461 + * Add git config safe-directory inside freebsd vm + * OSX: use the first IP of the interface + * Added "Continuous Build FreeBSD" badge + * Removed bad line and gcc12 install since gcc12 i preinstalled + * Possible fix for broken xcode command line tools + * Use gcc12 for macos12 + * FreeBSD: use the first IP of the interface + * Use sh instead of csh + * Update continuous-build-freebsd.yml + * Update continuous-build-macos.yml + * Create continuous-build-freebsd.yml + * Add actions run for pull requests (macos) [skip actions] + * Add actions run for pull requests (linux) [skip actions] + * Fixed: Not picking up last username from /etc/passwd + * make IPBUFFER_MAXSIZE an enum constant + * use inet_ntop instead of getnameinfo + * Show the first IP of the interface in NET box + * Address comment + * Fix bug in proc_tree view when showing full cmd + * proc tree: fix width threshold to match commit message and use and/or instead of &&, || + * proc tree view: if there's more than 40 width left, try to print full cmd + * macOS Ventura compile instructions + * macOS Ventura compile instructions + * Added autodetection for gcc12 to make compiling on macos Ventura easier. + * Fixed: Moved up get_cpuHz() in the execution order to get better cpu clock reading. + * Update continuous-build-macos.yml + * Update continuous-build-macos.yml + * Update continuous-build-linux.yml + * Fixed: Ignore disks that fails in statvfs64() to avoid slowdowns and possible crashes. + * fix: spelling mistake in btop.conf + * Changed: Reverted back to sysconf(_SC_NPROCESSORS_ONLN) for Cpu core count ant let the new dynamic update fix if cores are turned on later + * Makefile: Reverse VERBOSE bool to not stop with macOS make + * Update README.md + * Added more Makefile flags + * Added: VERBOSE=true flag for Makefile to display all compiler commands and fixed so already set CXXFLAGS and LDFLAGS are displayed. + +------------------------------------------------------------------- Old: ---- btop-1.2.12+git20221007.3dd6a6c.tar.gz New: ---- btop-1.2.13+git20221106.0f8498f.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ btop.spec ++++++ --- /var/tmp/diff_new_pack.Cjh6Ja/_old 2022-11-23 09:48:34.023185658 +0100 +++ /var/tmp/diff_new_pack.Cjh6Ja/_new 2022-11-23 09:48:34.027185679 +0100 @@ -17,7 +17,7 @@ Name: btop -Version: 1.2.12+git20221007.3dd6a6c +Version: 1.2.13+git20221106.0f8498f Release: 0 Summary: Usage and stats for processor, memory, disks, network and processes License: Apache-2.0 ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.Cjh6Ja/_old 2022-11-23 09:48:34.075185930 +0100 +++ /var/tmp/diff_new_pack.Cjh6Ja/_new 2022-11-23 09:48:34.079185951 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/aristocratos/btop</param> - <param name="changesrevision">3dd6a6cc6b3677d01c9adf33bd579713bf1dc2fa</param></service></servicedata> + <param name="changesrevision">0f8498fa4e68e3af36a50b1d9f97b931b41b0824</param></service></servicedata> (No newline at EOF) ++++++ btop-1.2.12+git20221007.3dd6a6c.tar.gz -> btop-1.2.13+git20221106.0f8498f.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/.github/workflows/continuous-build-freebsd.yml new/btop-1.2.13+git20221106.0f8498f/.github/workflows/continuous-build-freebsd.yml --- old/btop-1.2.12+git20221007.3dd6a6c/.github/workflows/continuous-build-freebsd.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/btop-1.2.13+git20221106.0f8498f/.github/workflows/continuous-build-freebsd.yml 2022-11-06 22:36:34.000000000 +0100 @@ -0,0 +1,50 @@ +name: Continuous Build FreeBSD + +on: + workflow_dispatch: + push: + branches: + - main + tags-ignore: + - '*.*' + paths: + - 'src/**' + - '!src/linux/**' + - '!src/osx/**' + - 'include/**' + - 'Makefile' + - '.github/workflows/continuous-build-freebsd.yml' + pull_request: + branches: + - main + paths: + - 'src/**' + - '!src/linux/**' + - '!src/osx/**' + - 'include/**' + - 'Makefile' + - '.github/workflows/continuous-build-freebsd.yml' + +jobs: + build-freebsd: + runs-on: macos-12 + steps: + - uses: actions/checkout@v3 + - name: Compile + uses: vmactions/freebsd-vm@v0 + with: + release: 13.1 + usesh: true + prepare: | + pkg install -y gmake gcc11 coreutils git + git config --global --add safe.directory /Users/runner/work/btop/btop + run: | + gmake + GIT_HASH=$(git rev-parse --short "$GITHUB_SHA") + mv bin/btop bin/btop-$GIT_HASH + ls -alh bin + - uses: actions/upload-artifact@v3 + with: + name: btop-x86_64-FreeBSD-13.1 + path: 'bin/*' + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/.github/workflows/continuous-build-linux.yml new/btop-1.2.13+git20221106.0f8498f/.github/workflows/continuous-build-linux.yml --- old/btop-1.2.12+git20221007.3dd6a6c/.github/workflows/continuous-build-linux.yml 2022-10-07 20:59:47.000000000 +0200 +++ new/btop-1.2.13+git20221106.0f8498f/.github/workflows/continuous-build-linux.yml 2022-11-06 22:36:34.000000000 +0100 @@ -14,6 +14,16 @@ - 'include/**' - 'Makefile' - '.github/workflows/continuous-build.yml' + pull_request: + branches: + - main + paths: + - 'src/**' + - '!src/osx/**' + - '!src/freebsd/**' + - 'include/**' + - 'Makefile' + - '.github/workflows/continuous-build.yml' jobs: static-build: @@ -83,7 +93,7 @@ run: git config --global --add safe.directory /__w/btop/btop - name: Checkout source - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Fix - Stopping at filesystem boundary run: git init # [fix Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).] @@ -107,7 +117,7 @@ cp bin/btop .artifacts/$FILENAME - name: Upload artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: btop-${{ matrix.toolchain }} path: '.artifacts/**' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/.github/workflows/continuous-build-macos.yml new/btop-1.2.13+git20221106.0f8498f/.github/workflows/continuous-build-macos.yml --- old/btop-1.2.12+git20221007.3dd6a6c/.github/workflows/continuous-build-macos.yml 2022-10-07 20:59:47.000000000 +0200 +++ new/btop-1.2.13+git20221106.0f8498f/.github/workflows/continuous-build-macos.yml 2022-11-06 22:36:34.000000000 +0100 @@ -1,6 +1,7 @@ name: Continuous Build MacOS on: + workflow_dispatch: push: branches: - main @@ -12,15 +13,23 @@ - '!src/freebsd/**' - 'include/**' - 'Makefile' - - '.github/workflows/*' + - '.github/workflows/continuous-build-macos.yml' + pull_request: + branches: + - main + paths: + - 'src/**' + - '!src/linux/**' + - '!src/freebsd/**' + - 'include/**' + - 'Makefile' + - '.github/workflows/continuous-build-macos.yml' jobs: - build-osx: - + build-macos11: runs-on: macos-11 - steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Compile run: | make CXX=g++-11 ARCH=x86_64 STATIC=true STRIP=true @@ -28,7 +37,27 @@ mv bin/btop bin/btop-x86_64-BigSur-$GIT_HASH ls -alh bin - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 + with: + name: btop-x86_64-macos11-BigSur + path: 'bin/*' + + build-macos12: + runs-on: macos-12 + steps: + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: latest-stable + + - uses: actions/checkout@v3 + - name: Compile + run: | + make CXX=g++-12 ARCH=x86_64 STATIC=true STRIP=true + GIT_HASH=$(git rev-parse --short "$GITHUB_SHA") + mv bin/btop bin/btop-x86_64-Monterey-$GIT_HASH + ls -alh bin + + - uses: actions/upload-artifact@v3 with: - name: btop-x86_64-macos-BigSur + name: btop-x86_64-macos12-Monterey path: 'bin/*' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/CHANGELOG.md new/btop-1.2.13+git20221106.0f8498f/CHANGELOG.md --- old/btop-1.2.12+git20221007.3dd6a6c/CHANGELOG.md 2022-10-07 20:59:47.000000000 +0200 +++ new/btop-1.2.13+git20221106.0f8498f/CHANGELOG.md 2022-11-06 22:36:34.000000000 +0100 @@ -1,3 +1,29 @@ +## v1.2.13 + +* Makefile: VERBOSE=true flag for Makefile to display all compiler commands and fixed so already set CXXFLAGS and LDFLAGS are displayed. + +* Makefile: Added autodetection for gcc12 to make compiling on macos Ventura easier. + +* Changed: Reverted back to sysconf(_SC_NPROCESSORS_ONLN) for Cpu core count ant let the new dynamic update fix if cores are turned on later + +* Fixed: Ignore disks that fails in statvfs64() to avoid slowdowns and possible crashes. + +* Fixed: Moved up get_cpuHz() in the execution order to get better cpu clock reading. + +* Added: proc tree view: if there's more than 40 width left, try to print full cmd, by @Superty + +* Fixed: Show the first IP of the interface in NET box instead of the last, by @correabuscar + +* Changed: Replace getnameinfo with inet_ntop [on Linux], by @correabuscar + +* Fixed: Not picking up last username from /etc/passwd + +* Fixed: Process nice value underflowing, issue #461 + +* Changed: Replace getnameinfo with inet_ntop [on FreeBSD], by @correabuscar + +* Changed: Replace getnameinfo with inet_ntop [on macos], by @correabuscar + ## v1.2.12 * Added: Dynamic updating of max number of CPU cores. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/Makefile new/btop-1.2.13+git20221106.0f8498f/Makefile --- old/btop-1.2.12+git20221007.3dd6a6c/Makefile 2022-10-07 20:59:47.000000000 +0200 +++ new/btop-1.2.13+git20221106.0f8498f/Makefile 2022-11-06 22:36:34.000000000 +0100 @@ -18,6 +18,9 @@ override PRE := info-quiet endif +OLDCXX := $(CXXFLAGS) +OLDLD := $(LDFLAGS) + PREFIX ?= /usr/local #? Detect PLATFORM and ARCH from uname/gcc if not set @@ -53,8 +56,16 @@ override ADDFLAGS += -s endif +ifeq ($(VERBOSE),true) + override VERBOSE := false +else + override VERBOSE := true +endif + #? Compiler and Linker -ifeq ($(shell command -v g++-11 >/dev/null; echo $$?),0) +ifeq ($(shell command -v g++-12 >/dev/null; echo $$?),0) + CXX := g++-12 +else ifeq ($(shell command -v g++-11 >/dev/null; echo $$?),0) CXX := g++-11 else ifeq ($(shell command -v g++11 >/dev/null; echo $$?),0) CXX := g++11 @@ -167,8 +178,8 @@ @printf "\033[1;91mWARNFLAGS \033[1;94m:| \033[0m$(WARNFLAGS)\n" @printf "\033[1;94mOPTFLAGS \033[1;94m:| \033[0m$(OPTFLAGS)\n" @printf "\033[1;93mLDCXXFLAGS \033[1;94m:| \033[0m$(LDCXXFLAGS)\n" - @printf "\033[1;95mCXXFLAGS \033[1;92m+| \033[0;37m\$$(\033[92mREQFLAGS\033[37m) \$$(\033[93mLDCXXFLAGS\033[37m) \$$(\033[94mOPTFLAGS\033[37m) \$$(\033[91mWARNFLAGS\033[37m)\n" - @printf "\033[1;95mLDFLAGS \033[1;92m+| \033[0;37m\$$(\033[93mLDCXXFLAGS\033[37m) \$$(\033[94mOPTFLAGS\033[37m) \$$(\033[91mWARNFLAGS\033[37m)\n" + @printf "\033[1;95mCXXFLAGS \033[1;92m+| \033[0;37m\$$(\033[92mREQFLAGS\033[37m) \$$(\033[93mLDCXXFLAGS\033[37m) \$$(\033[94mOPTFLAGS\033[37m) \$$(\033[91mWARNFLAGS\033[37m) $(OLDCXX)\n" + @printf "\033[1;95mLDFLAGS \033[1;92m+| \033[0;37m\$$(\033[93mLDCXXFLAGS\033[37m) \$$(\033[94mOPTFLAGS\033[37m) \$$(\033[91mWARNFLAGS\033[37m) $(OLDLD)\n" info-quiet: @sleep 0.1 2>/dev/null || true @@ -252,6 +263,7 @@ @sleep 0.2 2>/dev/null || true @TSTAMP=$$(date +%s 2>/dev/null || echo "0") @$(QUIET) || printf "\n\033[1;92mLinking and optimizing binary\033[37m...\033[0m\n" + @$(VERBOSE) || printf "$(CXX) -o $(TARGETDIR)/btop $^ $(LDFLAGS)\n" @$(CXX) -o $(TARGETDIR)/btop $^ $(LDFLAGS) || exit 1 @printf "\033[1;92m100$(P) -> \033[1;37m$(TARGETDIR)/btop \033[100D\033[38C\033[1;93m(\033[1;97m$$(du -ah $(TARGETDIR)/btop | cut -f1)iB\033[1;93m) \033[92m(\033[97m$$($(DATE_CMD) -d @$$(expr $$(date +%s 2>/dev/null || echo "0") - $${TSTAMP} 2>/dev/null) -u +%Mm:%Ss 2>/dev/null | sed 's/^00m://' || echo '')\033[92m)\033[0m\n" @printf "\n\033[1;92mBuild complete in \033[92m(\033[97m$$($(DATE_CMD) -d @$$(expr $$(date +%s 2>/dev/null || echo "0") - $(TIMESTAMP) 2>/dev/null) -u +%Mm:%Ss 2>/dev/null | sed 's/^00m://' || echo "unknown")\033[92m)\033[0m\n" @@ -262,6 +274,7 @@ @sleep 0.3 2>/dev/null || true @TSTAMP=$$(date +%s 2>/dev/null || echo "0") @$(QUIET) || printf "\033[1;97mCompiling $<\033[0m\n" + @$(VERBOSE) || printf "$(CXX) $(CXXFLAGS) $(INC) -MMD -c -o $@ $<\n" @$(CXX) $(CXXFLAGS) $(INC) -MMD -c -o $@ $< || exit 1 @printf "\033[1;92m$$($(PROGRESS))$(P)\033[10D\033[5C-> \033[1;37m$@ \033[100D\033[38C\033[1;93m(\033[1;97m$$(du -ah $@ | cut -f1)iB\033[1;93m) \033[92m(\033[97m$$($(DATE_CMD) -d @$$(expr $$($(DATE_CMD) +%s 2>/dev/null || echo "0") - $${TSTAMP} 2>/dev/null) -u +%Mm:%Ss 2>/dev/null | sed 's/^00m://' || echo '')\033[92m)\033[0m\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/README.md new/btop-1.2.13+git20221106.0f8498f/README.md --- old/btop-1.2.12+git20221007.3dd6a6c/README.md 2022-10-07 20:59:47.000000000 +0200 +++ new/btop-1.2.13+git20221106.0f8498f/README.md 2022-11-06 22:36:34.000000000 +0100 @@ -16,6 +16,7 @@ [](https://snapcraft.io/btop) [](https://github.com/aristocratos/btop/actions/workflows/continuous-build-linux.yml) [](https://github.com/aristocratos/btop/actions/workflows/continuous-build-macos.yml) +[](https://github.com/aristocratos/btop/actions/workflows/continuous-build-freebsd.yml) ## Index @@ -327,7 +328,9 @@ 3. **Compile** - Append `STATIC=true` to `make` command for static compilation. + Append `VERBOSE=true` to display full compiler/linker commands. + + Append `STATIC=true` for static compilation. Notice! If using LDAP Authentication, usernames will show as UID number for LDAP users if compiling statically with glibc. @@ -397,6 +400,8 @@ ## Compilation macOS OSX Needs GCC 10 or higher, (GCC 11 or above strongly recommended for better CPU efficiency in the compiled binary). + + GCC 12 needed for macOS Ventura. If you get linker errors on Ventura you'll need to upgrade your command line tools (Version 14.0) is bugged. The makefile also needs GNU coreutils and `sed`. @@ -405,7 +410,7 @@ 1. **Install dependencies (example for Homebrew)** ``` bash - brew install coreutils make gcc@11 + brew install coreutils make gcc@12 ``` 2. **Clone repository** @@ -417,7 +422,9 @@ 3. **Compile** - Append `STATIC=true` to `make` command for static compilation (only libgcc and libstdc++ will be static!). + Append `VERBOSE=true` to display full compiler/linker commands. + + Append `STATIC=true` for static compilation (only libgcc and libstdc++ will be static!). Append `QUIET=true` for less verbose output. @@ -501,7 +508,7 @@ 3. **Compile** - Append `STATIC=true` to `make` command for static compilation. + Append `VERBOSE=true` to display full compiler/linker commands. Append `QUIET=true` for less verbose output. @@ -618,7 +625,7 @@ #* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. #* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. -#* Use withespace " " as separator between different presets. +#* Use whitespace " " as separator between different presets. #* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/src/btop.cpp new/btop-1.2.13+git20221106.0f8498f/src/btop.cpp --- old/btop-1.2.12+git20221007.3dd6a6c/src/btop.cpp 2022-10-07 20:59:47.000000000 +0200 +++ new/btop-1.2.13+git20221106.0f8498f/src/btop.cpp 2022-11-06 22:36:34.000000000 +0100 @@ -73,7 +73,7 @@ {"#801414", "ââââââââ âââ ââââââââââââ âââ âââ"}, {"#000000", "âââââââ âââ âââââââ âââ"}, }; - const string Version = "1.2.12"; + const string Version = "1.2.13"; int coreCount; string overlay; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/src/btop_config.cpp new/btop-1.2.13+git20221106.0f8498f/src/btop_config.cpp --- old/btop-1.2.12+git20221007.3dd6a6c/src/btop_config.cpp 2022-10-07 20:59:47.000000000 +0200 +++ new/btop-1.2.13+git20221106.0f8498f/src/btop_config.cpp 2022-11-06 22:36:34.000000000 +0100 @@ -56,7 +56,7 @@ {"presets", "#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.\n" "#* Format: \"box_name:P:G,box_name:P:G\" P=(0 or 1) for alternate positions, G=graph symbol to use for box.\n" - "#* Use withespace \" \" as separator between different presets.\n" + "#* Use whitespace \" \" as separator between different presets.\n" "#* Example: \"cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty\""}, {"vim_keys", "#* Set to True to enable \"h,j,k,l,g,G\" keys for directional control in lists.\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/src/btop_draw.cpp new/btop-1.2.13+git20221106.0f8498f/src/btop_draw.cpp --- old/btop-1.2.12+git20221007.3dd6a6c/src/btop_draw.cpp 2022-10-07 20:59:47.000000000 +0200 +++ new/btop-1.2.13+git20221106.0f8498f/src/btop_draw.cpp 2022-11-06 22:36:34.000000000 +0100 @@ -1473,9 +1473,12 @@ out += c_color + uresize(p.name, width_left - 1) + end + ' '; width_left -= (ulen(p.name) + 1); } - if (width_left > 7 and p.short_cmd != p.name) { - out += g_color + '(' + uresize(p.short_cmd, width_left - 3, p_wide_cmd[p.pid]) + ") "; - width_left -= (ulen(p.short_cmd, true) + 3); + if (width_left > 7) { + const string& cmd = width_left > 40 ? rtrim(p.cmd) : p.short_cmd; + if (not cmd.empty() and cmd != p.name) { + out += g_color + '(' + uresize(cmd, width_left - 3, p_wide_cmd[p.pid]) + ") "; + width_left -= (ulen(cmd, true) + 3); + } } out += string(max(0, width_left), ' ') + Mv::to(y+2+lc, x+2+tree_size); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/src/btop_menu.cpp new/btop-1.2.13+git20221106.0f8498f/src/btop_menu.cpp --- old/btop-1.2.12+git20221007.3dd6a6c/src/btop_menu.cpp 2022-10-07 20:59:47.000000000 +0200 +++ new/btop-1.2.13+git20221106.0f8498f/src/btop_menu.cpp 2022-11-06 22:36:34.000000000 +0100 @@ -207,7 +207,7 @@ "P=(0 or 1) for alternate positions.", "G=graph symbol to use for box.", "", - "Use withespace \" \" as separator between", + "Use whitespace \" \" as separator between", "different presets.", "", "Example:", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/src/btop_shared.hpp new/btop-1.2.13+git20221106.0f8498f/src/btop_shared.hpp --- old/btop-1.2.12+git20221007.3dd6a6c/src/btop_shared.hpp 2022-10-07 20:59:47.000000000 +0200 +++ new/btop-1.2.13+git20221106.0f8498f/src/btop_shared.hpp 2022-11-06 22:36:34.000000000 +0100 @@ -262,7 +262,7 @@ double cpu_p{}; // defaults to = 0.0 double cpu_c{}; // defaults to = 0.0 char state = '0'; - uint64_t p_nice{}; // defaults to 0 + int64_t p_nice{}; // defaults to 0 uint64_t ppid{}; // defaults to 0 uint64_t cpu_s{}; // defaults to 0 uint64_t cpu_t{}; // defaults to 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/src/freebsd/btop_collect.cpp new/btop-1.2.13+git20221106.0f8498f/src/freebsd/btop_collect.cpp --- old/btop-1.2.12+git20221007.3dd6a6c/src/freebsd/btop_collect.cpp 2022-10-07 20:59:47.000000000 +0200 +++ new/btop-1.2.13+git20221106.0f8498f/src/freebsd/btop_collect.cpp 2022-11-06 22:36:34.000000000 +0100 @@ -19,13 +19,15 @@ #include <cstdio> #include <cstdlib> #include <cstring> -#include <ifaddrs.h> #include <libproc.h> +// man 3 getifaddrs: "BUGS: If both <net/if.h> and <ifaddrs.h> are being included, <net/if.h> must be included before <ifaddrs.h>" #include <net/if.h> +#include <ifaddrs.h> #include <net/if_dl.h> #include <net/route.h> #include <netdb.h> #include <netinet/tcp_fsm.h> +#include <netinet/in.h> // for inet_ntop stuff #include <pwd.h> #include <sys/_timeval.h> #include <sys/endian.h> @@ -820,7 +822,9 @@ return empty_net; } int family = 0; - char ip[NI_MAXHOST]; + static_assert(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN); // 46 >= 16, compile-time assurance. + enum { IPBUFFER_MAXSIZE = INET6_ADDRSTRLEN }; // manually using the known biggest value, guarded by the above static_assert + char ip[IPBUFFER_MAXSIZE]; interfaces.clear(); string ipv4, ipv6; @@ -829,22 +833,40 @@ if (ifa->ifa_addr == NULL) continue; family = ifa->ifa_addr->sa_family; const auto &iface = ifa->ifa_name; - //? Get IPv4 address - if (family == AF_INET) { - if (getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr), ip, NI_MAXHOST, NULL, 0, NI_NUMERICHOST) == 0) - net[iface].ipv4 = ip; - } - //? Get IPv6 address - // else if (family == AF_INET6) { - // if (getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in6), ip, NI_MAXHOST, NULL, 0, NI_NUMERICHOST) == 0) - // net[iface].ipv6 = ip; - // } - //? Update available interfaces vector and get status of interface if (not v_contains(interfaces, iface)) { interfaces.push_back(iface); net[iface].connected = (ifa->ifa_flags & IFF_RUNNING); + + // An interface can have more than one IP of the same family associated with it, + // but we pick only the first one to show in the NET box. + // Note: Interfaces without any IPv4 and IPv6 set are still valid and monitorable! + net[iface].ipv4.clear(); + net[iface].ipv6.clear(); } + //? Get IPv4 address + if (family == AF_INET) { + if (net[iface].ipv4.empty()) { + if (NULL != inet_ntop(family, &(reinterpret_cast<struct sockaddr_in*>(ifa->ifa_addr)->sin_addr), ip, IPBUFFER_MAXSIZE)) { + + net[iface].ipv4 = ip; + } else { + int errsv = errno; + Logger::error("Net::collect() -> Failed to convert IPv4 to string for iface " + string(iface) + ", errno: " + strerror(errsv)); + } + } + } + //? Get IPv6 address + else if (family == AF_INET6) { + if (net[iface].ipv6.empty()) { + if (NULL != inet_ntop(family, &(reinterpret_cast<struct sockaddr_in6*>(ifa->ifa_addr)->sin6_addr), ip, IPBUFFER_MAXSIZE)) { + net[iface].ipv6 = ip; + } else { + int errsv = errno; + Logger::error("Net::collect() -> Failed to convert IPv6 to string for iface " + string(iface) + ", errno: " + strerror(errsv)); + } + } + } //else, ignoring family==AF_LINK (see man 3 getifaddrs) } unordered_flat_map<string, std::tuple<uint64_t, uint64_t>> ifstats; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/src/linux/btop_collect.cpp new/btop-1.2.13+git20221106.0f8498f/src/linux/btop_collect.cpp --- old/btop-1.2.12+git20221007.3dd6a6c/src/linux/btop_collect.cpp 2022-10-07 20:59:47.000000000 +0200 +++ new/btop-1.2.13+git20221106.0f8498f/src/linux/btop_collect.cpp 2022-11-06 22:36:34.000000000 +0100 @@ -26,7 +26,8 @@ #include <netdb.h> #include <ifaddrs.h> #include <net/if.h> -#include <thread> +#include <arpa/inet.h> // for inet_ntop() + #if !(defined(STATIC_BUILD) && defined(__GLIBC__)) #include <pwd.h> @@ -107,7 +108,7 @@ if (passwd_path.empty()) Logger::warning("Could not read /etc/passwd, will show UID instead of username."); - coreCount = std::thread::hardware_concurrency(); + coreCount = sysconf(_SC_NPROCESSORS_ONLN); if (coreCount < 1) { coreCount = sysconf(_SC_NPROCESSORS_CONF); if (coreCount < 1) { @@ -668,6 +669,9 @@ if (Runner::stopping or (no_update and not current_cpu.cpu_percent.at("total").empty())) return current_cpu; auto& cpu = current_cpu; + if (Config::getB("show_cpu_freq")) + cpuHz = get_cpuHz(); + ifstream cread; try { @@ -795,9 +799,6 @@ else throw std::runtime_error("Cpu::collect() : " + string{e.what()}); } - if (Config::getB("show_cpu_freq")) - cpuHz = get_cpuHz(); - if (Config::getB("check_temp") and got_sensors) update_sensors(); @@ -926,6 +927,7 @@ //? Get disks stats if (show_disks) { + static vector<string> ignore_list; double uptime = system_uptime(); auto free_priv = Config::getB("disk_free_priv"); try { @@ -998,7 +1000,7 @@ diskread >> dev >> mountpoint >> fstype; diskread.ignore(SSmax, '\n'); - if (v_contains(found, mountpoint)) continue; + if (v_contains(ignore_list, mountpoint) or v_contains(found, mountpoint)) continue; //? Match filter if not empty if (not filter.empty()) { @@ -1057,6 +1059,7 @@ } } } + //? Remove disks no longer mounted or filtered out if (swap_disk and has_swap) found.push_back("swap"); for (auto it = disks.begin(); it != disks.end();) { @@ -1073,11 +1076,14 @@ diskread.close(); //? Get disk/partition stats + bool new_ignored = false; for (auto& [mountpoint, disk] : disks) { - if (std::error_code ec; not fs::exists(mountpoint, ec)) continue; + if (std::error_code ec; not fs::exists(mountpoint, ec) or v_contains(ignore_list, mountpoint)) continue; struct statvfs64 vfs; if (statvfs64(mountpoint.c_str(), &vfs) < 0) { - Logger::warning("Failed to get disk/partition stats with statvfs() for: " + mountpoint); + Logger::warning("Failed to get disk/partition stats for mount \""+ mountpoint + "\" with statvfs64 error code: " + to_string(errno) + ". Ignoring..."); + ignore_list.push_back(mountpoint); + new_ignored = true; continue; } disk.total = vfs.f_blocks * vfs.f_frsize; @@ -1087,6 +1093,16 @@ disk.free_percent = 100 - disk.used_percent; } + //? Remove any problematic disks added to the ignore_list + if (new_ignored) { + for (auto it = disks.begin(); it != disks.end();) { + if (v_contains(ignore_list, it->first)) + it = disks.erase(it); + else + it++; + } + } + //? Setup disks order in UI and add swap if enabled mem.disks_order.clear(); #ifdef SNAPPED @@ -1374,32 +1390,53 @@ return empty_net; } int family = 0; - char ip[NI_MAXHOST]; + static_assert(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN); // 46 >= 16, compile-time assurance. + enum { IPBUFFER_MAXSIZE = INET6_ADDRSTRLEN }; // manually using the known biggest value, guarded by the above static_assert + char ip[IPBUFFER_MAXSIZE]; interfaces.clear(); string ipv4, ipv6; //? Iteration over all items in getifaddrs() list - for (auto* ifa = if_wrap(); ifa != NULL; ifa = ifa->ifa_next) { + for (auto* ifa = if_wrap(); ifa != NULL; ifa = ifa->ifa_next) { if (ifa->ifa_addr == NULL) continue; family = ifa->ifa_addr->sa_family; const auto& iface = ifa->ifa_name; - //? Get IPv4 address - if (family == AF_INET) { - if (getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in), ip, NI_MAXHOST, NULL, 0, NI_NUMERICHOST) == 0) - net[iface].ipv4 = ip; - } - //? Get IPv6 address - else if (family == AF_INET6) { - if (getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in6), ip, NI_MAXHOST, NULL, 0, NI_NUMERICHOST) == 0) - net[iface].ipv6 = ip; - } - //? Update available interfaces vector and get status of interface if (not v_contains(interfaces, iface)) { interfaces.push_back(iface); net[iface].connected = (ifa->ifa_flags & IFF_RUNNING); + + // An interface can have more than one IP of the same family associated with it, + // but we pick only the first one to show in the NET box. + // Note: Interfaces without any IPv4 and IPv6 set are still valid and monitorable! + net[iface].ipv4.clear(); + net[iface].ipv6.clear(); + } + + + //? Get IPv4 address + if (family == AF_INET) { + if (net[iface].ipv4.empty()) { + if (NULL != inet_ntop(family, &(reinterpret_cast<struct sockaddr_in*>(ifa->ifa_addr)->sin_addr), ip, IPBUFFER_MAXSIZE)) { + net[iface].ipv4 = ip; + } else { + int errsv = errno; + Logger::error("Net::collect() -> Failed to convert IPv4 to string for iface " + string(iface) + ", errno: " + strerror(errsv)); + } + } } + //? Get IPv6 address + else if (family == AF_INET6) { + if (net[iface].ipv6.empty()) { + if (NULL != inet_ntop(family, &(reinterpret_cast<struct sockaddr_in6*>(ifa->ifa_addr)->sin6_addr), ip, IPBUFFER_MAXSIZE)) { + net[iface].ipv6 = ip; + } else { + int errsv = errno; + Logger::error("Net::collect() -> Failed to convert IPv6 to string for iface " + string(iface) + ", errno: " + strerror(errsv)); + } + } + } //else, ignoring family==AF_PACKET (see man 3 getifaddrs) which is the first one in the `for` loop. } //? Get total recieved and transmitted bytes + device address if no ip was found @@ -1707,6 +1744,7 @@ getline(pread, r_user, ':'); pread.ignore(SSmax, ':'); getline(pread, r_uid, ':'); + if (uid_user.contains(r_uid)) break; uid_user[r_uid] = r_user; pread.ignore(SSmax, '\n'); } @@ -1846,7 +1884,7 @@ next_x = 19; continue; case 19: //? Nice value - new_proc.p_nice = stoull(short_str); + new_proc.p_nice = stoll(short_str); continue; case 20: //? Number of threads new_proc.threads = stoull(short_str); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/btop-1.2.12+git20221007.3dd6a6c/src/osx/btop_collect.cpp new/btop-1.2.13+git20221106.0f8498f/src/osx/btop_collect.cpp --- old/btop-1.2.12+git20221007.3dd6a6c/src/osx/btop_collect.cpp 2022-10-07 20:59:47.000000000 +0200 +++ new/btop-1.2.13+git20221106.0f8498f/src/osx/btop_collect.cpp 2022-11-06 22:36:34.000000000 +0100 @@ -19,7 +19,6 @@ #include <CoreFoundation/CoreFoundation.h> #include <IOKit/IOKitLib.h> #include <arpa/inet.h> -#include <ifaddrs.h> #include <libproc.h> #include <mach/mach.h> #include <mach/mach_host.h> @@ -28,7 +27,12 @@ #include <mach/processor_info.h> #include <mach/vm_statistics.h> #include <mach/mach_time.h> +// BUGS +// If both <net/if.h> and <ifaddrs.h> are being included, <net/if.h> must be +// included before <ifaddrs.h>. +// from: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/getifaddrs.3.html #include <net/if.h> +#include <ifaddrs.h> #include <net/if_dl.h> #include <netdb.h> #include <netinet/tcp_fsm.h> @@ -37,6 +41,7 @@ #include <sys/statvfs.h> #include <sys/sysctl.h> #include <sys/types.h> +#include <netinet/in.h> // for inet_ntop #include <unistd.h> #include <stdexcept> @@ -859,7 +864,9 @@ return empty_net; } int family = 0; - char ip[NI_MAXHOST]; + static_assert(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN); // 46 >= 16, compile-time assurance. + enum { IPBUFFER_MAXSIZE = INET6_ADDRSTRLEN }; // manually using the known biggest value, guarded by the above static_assert + char ip[IPBUFFER_MAXSIZE]; interfaces.clear(); string ipv4, ipv6; @@ -868,22 +875,38 @@ if (ifa->ifa_addr == NULL) continue; family = ifa->ifa_addr->sa_family; const auto &iface = ifa->ifa_name; - //? Get IPv4 address - if (family == AF_INET) { - if (getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in), ip, NI_MAXHOST, NULL, 0, NI_NUMERICHOST) == 0) - net[iface].ipv4 = ip; - } - //? Get IPv6 address - else if (family == AF_INET6) { - if (getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in6), ip, NI_MAXHOST, NULL, 0, NI_NUMERICHOST) == 0) - net[iface].ipv6 = ip; - } - //? Update available interfaces vector and get status of interface if (not v_contains(interfaces, iface)) { interfaces.push_back(iface); net[iface].connected = (ifa->ifa_flags & IFF_RUNNING); + // An interface can have more than one IP of the same family associated with it, + // but we pick only the first one to show in the NET box. + // Note: Interfaces without any IPv4 and IPv6 set are still valid and monitorable! + net[iface].ipv4.clear(); + net[iface].ipv6.clear(); } + //? Get IPv4 address + if (family == AF_INET) { + if (net[iface].ipv4.empty()) { + if (NULL != inet_ntop(family, &(reinterpret_cast<struct sockaddr_in*>(ifa->ifa_addr)->sin_addr), ip, IPBUFFER_MAXSIZE)) { + net[iface].ipv4 = ip; + } else { + int errsv = errno; + Logger::error("Net::collect() -> Failed to convert IPv4 to string for iface " + string(iface) + ", errno: " + strerror(errsv)); + } + } + } + //? Get IPv6 address + else if (family == AF_INET6) { + if (net[iface].ipv6.empty()) { + if (NULL != inet_ntop(family, &(reinterpret_cast<struct sockaddr_in6*>(ifa->ifa_addr)->sin6_addr), ip, IPBUFFER_MAXSIZE)) { + net[iface].ipv6 = ip; + } else { + int errsv = errno; + Logger::error("Net::collect() -> Failed to convert IPv6 to string for iface " + string(iface) + ", errno: " + strerror(errsv)); + } + } + } // else, ignoring family==AF_LINK (see man 3 getifaddrs) } unordered_flat_map<string, std::tuple<uint64_t, uint64_t>> ifstats; ++++++ btop.obsinfo ++++++ --- /var/tmp/diff_new_pack.Cjh6Ja/_old 2022-11-23 09:48:34.199186577 +0100 +++ /var/tmp/diff_new_pack.Cjh6Ja/_new 2022-11-23 09:48:34.203186598 +0100 @@ -1,5 +1,5 @@ name: btop -version: 1.2.12+git20221007.3dd6a6c -mtime: 1665169187 -commit: 3dd6a6cc6b3677d01c9adf33bd579713bf1dc2fa +version: 1.2.13+git20221106.0f8498f +mtime: 1667770594 +commit: 0f8498fa4e68e3af36a50b1d9f97b931b41b0824