Merge branch 'main' into eta_fix

This commit is contained in:
Andrew Wood
2023-07-16 11:41:50 +01:00
committed by GitHub
17 changed files with 710 additions and 756 deletions
+3 -1
View File
@@ -14,6 +14,8 @@ Documentation
A manual page is included in this distribution. See "`man ./doc/quickref.1`",
or "`man pv`" after installation.
Changes are listed in "[doc/NEWS.md](./doc/NEWS.md)". The to-do list is "[doc/TODO.md](./doc/TODO.md)".
Compilation
-----------
@@ -38,7 +40,7 @@ TODOs marked in the code.
Author and acknowledgements
---------------------------
This package is copyright 2022 Andrew Wood, and is being distributed under
This package is copyright 2023 Andrew Wood, and is being distributed under
the terms of the Artistic License 2.0. For more details of this license,
see the file "[doc/COPYING](./doc/COPYING)".
+7 -3
View File
@@ -156,7 +156,12 @@ dnl
AC_DEFINE(HAVE_CONFIG_H)
AC_HEADER_STDC
AC_HEADER_STDBOOL
AC_CHECK_FUNCS(memcpy basename snprintf stat64)
AC_CHECK_FUNCS(memcpy basename snprintf)
dnl OSX 11 (apple silicon) lets you link stat64() but fails to compile
dnl so use a compile test for stat64() instead of a link test.
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main() { stat64(); }])],
[AC_DEFINE([HAVE_STAT64], [1], [Is stat64() available])],
[])
AC_CHECK_HEADERS(limits.h)
if test "$IPC_SUPPORT" = "yes"; then
@@ -189,8 +194,7 @@ dnl Output files (and create build directory structure too).
dnl
AC_OUTPUT(Makefile:$mk_segments doc/lsm:doc/lsm.in
doc/quickref.1:doc/quickref.1.in
doc/$PACKAGE.spec:doc/spec.in
src/.dummy:doc/NEWS,
src/.dummy:doc/NEWS.md,
rm -f src/.dummy
for i in $subdirs; do
test -d $i || mkdir $i
+4 -22
View File
@@ -6,8 +6,7 @@
clean depclean indentclean distclean cvsclean svnclean \
index manhtml indent update-po \
doc dist release \
install uninstall \
rpm srpm
install uninstall
all: $(alltarg) $(CATALOGS)
@@ -35,9 +34,7 @@ help:
@echo ' update-po update the .po files'
@echo
@echo ' dist create a source tarball for distribution'
@echo ' rpm build a binary RPM (passes $$RPMFLAGS to RPM)'
@echo ' srpm build a source RPM (passes $$RPMFLAGS to RPM)'
@echo ' release dist+rpm+srpm'
@echo ' release create and sign tar.gz and tar.bz2'
@echo
make:
@@ -83,13 +80,12 @@ update-po: $(srcdir)/src/nls/$(PACKAGE).pot
distclean: clean depclean
rm -f $(alltarg) src/include/config.h
rm -rf $(package)-$(version).tar* $(package)-$(version) $(package)-$(version)-*.rpm
rm -rf $(package)-$(version).tar* $(package)-$(version)
rm -f *.html config.*
rm Makefile
cvsclean svnclean: distclean
rm -f doc/lsm
rm -f doc/$(package).spec
rm -f doc/quickref.1
rm -f configure
rm -f src/nls/*.gmo src/nls/*.mo
@@ -123,7 +119,6 @@ dist: doc update-po
cp -dprf Makefile $(distfiles) $(package)-$(version)
cd $(package)-$(version); $(MAKE) distclean
cp -dpf doc/lsm $(package)-$(version)/doc/
cp -dpf doc/$(package).spec $(package)-$(version)/doc/
chmod 644 `find $(package)-$(version) -type f -print`
chmod 755 `find $(package)-$(version) -type d -print`
chmod 755 `find $(package)-$(version)/autoconf/scripts`
@@ -181,21 +176,8 @@ uninstall:
done; \
fi
rpm:
test -e $(package)-$(version).tar.gz || $(MAKE) dist
rpmbuild $(RPMFLAGS) --define="%_topdir `pwd`/rpm" -tb $(package)-$(version).tar.gz
mv rpm/RPMS/*/$(package)-*.rpm .
rm -rf rpm
srpm:
test -e $(package)-$(version).tar.gz || $(MAKE) dist
rpmbuild $(RPMFLAGS) --define="%_topdir `pwd`/rpm" -ts $(package)-$(version).tar.gz
mv rpm/SRPMS/*$(package)-*.rpm .
rm -rf rpm
release: dist rpm srpm
release: dist
zcat $(package)-$(version).tar.gz | bzip2 > $(package)-$(version).tar.bz2
-grep -Fq '%_gpg_name' ~/.rpmmacros 2>/dev/null && rpm --addsign *.rpm
-gpg --list-secret-keys 2>&1 | grep -Fq 'uid' && gpg -ab *.tar.gz && rename .asc .txt *.tar.gz.asc
-gpg --list-secret-keys 2>&1 | grep -Fq 'uid' && gpg -ab *.tar.bz2 && rename .asc .txt *.tar.bz2.asc
chmod 644 $(package)-$(version)*
+38 -33
View File
@@ -1,10 +1,10 @@
The following people have contributed to this project, and their assistance
is acknowledged and greatly appreciated:
* Jakub Hrozek <jhrozek@redhat.com> - Fedora package maintainer
* Antoine Beaupré <anarcat@debian.org> - Debian package maintainer
* Kevin Coyner <kcoyner@debian.org> - previous Debian package maintainer
* Cédric Delfosse <cedric@debian.org> - previous Debian package maintainer
* Jakub Hrozek <jhrozek@redhat.com> - Fedora package maintainer
* Eduardo Aguiar <eduardo.oliveira@sondabrasil.com.br> - provided Portuguese (Brazilian) translation
* Stéphane Lacasse <stephane@gorfou.ca> - provided French translation
* Marcos Kreinacke <public@kreinacke.com> - provided German translation
@@ -12,65 +12,70 @@ is acknowledged and greatly appreciated:
* Joshua Jensen - reported RPM installation bug
* Boris Folgmann <http://www.folgmann.com/en/> - reported cursor handling bug
* Mathias Gumz - reported NLS bug
* Daniel Roethlisberger - submitted patch to use lockfiles for -c if terminal locking fails
* Adam Buchbinder - lots of help with a Cygwin port of -c
* Mark Tomich <http://metuchen.dyndns.org> - suggested -B option
* Gert Menke - reported bug when piping to dd with a large input buffer size
* Daniel Roethlisberger - submitted patch to use lockfiles for "`-c`" if terminal locking fails
* Adam Buchbinder - lots of help with a Cygwin port of "`-c`"
* Mark Tomich <http://metuchen.dyndns.org> - suggested "`-B`" option
* Gert Menke - reported bug when piping to `dd` with a large input buffer size
* Ville Herva <Ville.Herva@iki.fi> - informative bug report about rate limiting performance
* Elias Pipping - patch to compile properly on Darwin 9; potential NULL deref report
* Patrick Collison - similar patch for OS X
* Boris Lohner - reported problem that "-L" does not complain if given non-numeric value
* Sebastian Kayser - supplied testing for SIGPIPE, demonstrated internationalisation problem
* Laszlo Ersek <http://phptest11.atw.hu/> - reported shared memory leak on SIGINT with -c
* Boris Lohner - reported problem that "`-L`" does not complain if given non-numeric value
* Sebastian Kayser - supplied testing for *SIGPIPE*, demonstrated internationalisation problem
* Laszlo Ersek <http://phptest11.atw.hu/> - reported shared memory leak on *SIGINT* with "`-c`"
* Phil Rutschman <http://bandgap.rsnsoft.com/> - provided a patch for fully restoring terminal state on exit
* Henry Precheur <http://henry.precheur.org/> - reporting and suggestions for --rate-limit bug when rate is under 10
* Henry Precheur <http://henry.precheur.org/> - reporting and suggestions for "`--rate-limit`" bug when rate is under 10
* E. Rosten <http://mi.eng.cam.ac.uk/~er258/> - supplied patch for block buffering in line mode
* Kjetil Torgrim Homme - reported compilation error with default CFLAGS on non-GCC compilers
* Kjetil Torgrim Homme - reported compilation error with default *CFLAGS* on non-GCC compilers
* Alexandre de Verteuil - reported bug in OS X build and supplied test environment to fix in
* Martin Baum - supplied patch to return nonzero exit status if terminated by signal
* Sam Nelson <http://www.siliconfuture.net/> - supplied patch to fix trailing slash on DESTDIR
* Daniel Pape - reported Cygwin installation problem due to DESTDIR
* Sam Nelson <http://www.siliconfuture.net/> - supplied patch to fix trailing slash on *DESTDIR*
* Daniel Pape - reported Cygwin installation problem due to *DESTDIR*
* Philipp Beckers - ported to the Syabas PopcornHour A-100 series
* Henry Gebhard <hsggebhardt@googlemail.com> - supplied patches to improve SI prefixes and add --average-rate
* Henry Gebhard <hsggebhardt@googlemail.com> - supplied patches to improve SI prefixes and add "`--average-rate`"
* Vladimir Kokarev, Alexander Leo - reported that exit status did not reflect file errors
* Thomas Rachel - submitted patches for IEEE1541 (MiB suffixes), 1+e03 bug
* Guillaume Marcais - submitted speedup patch for line mode
* Moritz Barsnick - submitted patch for compile warning in size calculation
* Pawel Piatek - submitted RPM and patches for AIX
* Sami Liedes - submitted patch for --timer and --bytes with --numeric
* Steven Willis - reported problem with "-R" killing non-PV remote processes
* Vladimir Pal, Vladimir Ermakov - submitted patch which led to development of --format option
* Sami Liedes - submitted patch for "`--timer`" and "`--bytes`" with "`--numeric`"
* Steven Willis - reported problem with "`-R`" killing non-PV remote processes
* Vladimir Pal, Vladimir Ermakov - submitted patch which led to development of "`--format`" option
* Peter Samuelson <peter@p12n.org> - submitted patch to calculate size if stdout is a block device
* Miguel Diaz - much Cygwin help (and packaging), found narrow-terminal bug
* Jim Salter <http://ubuntuwiki.net> - commissioned work on the --skip-errors option
* Jim Salter <http://ubuntuwiki.net> - commissioned work on the "`--skip-errors`" option
* Wouter Pronk - reported build problem on SCO
* Bryan Dongray <http://www.dongrays.com> - provided patches for test scripts failing on older Red Hats
* Zev Weiss <www.bewilderbeest.net> - provided patch to fix splice() not using stdin
* Zing Shishak - provided patch for --null / -0 (count null terminated lines)
* Jacek Wielemborek <http://deetah.jogger.pl/kategorie/english> - implemented fdwatch in Python, suggested PV port; reported bug with "-l" and ETA / size; many other contributions
* Zev Weiss <www.bewilderbeest.net> - provided patch to fix `splice()` not using stdin
* Zing Shishak - provided patch for "`--null`" / "`-0`" (count null terminated lines)
* Jacek Wielemborek <http://deetah.jogger.pl/kategorie/english> - implemented fdwatch in Python, suggested PV port; reported bug with "`-l`" and ETA / size; many other contributions
* Kim Krecht - suggested buffer fill status and last bytes output display options
* Cristian Ciupitu <http://ciupicri.github.io>, Josh Stone - pointed out file descriptor leak with helpful suggestions (Josh Stone initially noticed the missing close)
* Jan Seda - found issue with splice() and SPLICE_F_NONBLOCK causing slowdown
* André Stapf - pointed out formatting problem e.g. 13GB -> 13.1GB which should be shown 13.0GB -> 13.1GB; highlighted on-startup row swapping in -c
* Damon Harper <http://www.usrbin.ca/> - suggested "-D" / "--delay-start" option
* Ganaël Laplanche <http://www.martymac.org> - provided patch for lstat64 on systems that do not support it
* Peter Korsgaard <http://www.buildroot.net/> - provided similar patch for lstat64, specifically for uClibc support; provided AIX cross-compilation patch to fix bug in -lc128 check
* Jan Seda - found issue with `splice()` and *SPLICE_F_NONBLOCK* causing slowdown
* André Stapf - pointed out formatting problem e.g. 13GB -> 13.1GB which should be shown 13.0GB -> 13.1GB; highlighted on-startup row swapping in "`-c`"
* Damon Harper <http://www.usrbin.ca/> - suggested "`-D`" / "`--delay-start`" option
* Ganaël Laplanche <http://www.martymac.org> - provided patch for `lstat64()` on systems that do not support it
* Peter Korsgaard <http://www.buildroot.net/> - provided similar patch for `lstat64()`, specifically for uClibc support; provided AIX cross-compilation patch to fix bug in "`-lc128`" check
* Ralf Ramsauer <https://blog.ramses-pyramidenbau.de/> - reported bug which dropped transfer rate on terminal resize
* Michiel Van Herwegen - reported and discussed bug with "-l" and ETA / size
* Erkki Seppälä <http://www.inside.org/~flux/> - provided patch implementing "-I"
* Eric A. Borisch - provided details of compatibility fix for "%Lu" in watchpid code
* Michiel Van Herwegen - reported and discussed bug with "`-l`" and ETA / size
* Erkki Seppälä <http://www.inside.org/~flux/> - provided patch implementing "`-I`"
* Eric A. Borisch - provided details of compatibility fix for "`%Lu`" in watchpid code
* Jan Venekamp - reported MacOS buffer size interactions with pipes
* Matt <https://github.com/lemonsqueeze/pv> - provided "rate-window" patches for rate calculation
* Filippo Valsorda - provided patch for stat64 issue on Apple Silicon
* Matt Koscica, William Dillon - also reported stat64 issue on Apple Silicon
* Norman Rasmussen - suggested -c with -d PID:FD, reject -N with -d PID
* Andriy Gapon, Jonathan Elchison - reported bug where "pv /dev/zero >/dev/null &" stops immediately
* Norman Rasmussen - suggested "`-c`" with "`-d PID:FD`", reject "`-N`" with "`-d PID`"
* Andriy Gapon, Jonathan Elchison - reported bug where "`pv /dev/zero >/dev/null &`" stops immediately
* Marcelo Chiesa - reported unused-result warnings when compiling PV 1.6.6
* Jered Floyd - provided patches to improve --rate-limit
* Jered Floyd - provided patches to improve "`--rate-limit`"
* Christoph Biedl - provided ETA and dynamic interval patches
* Richard Fonfara - provided German translations for "pv --help"
* Johannes Gerer <http://johannesgerer.com> - suggested that "-B" should enable "-C"
* Richard Fonfara - provided German translations for "`pv --help`"
* Johannes Gerer <http://johannesgerer.com> - suggested that "`-B`" should enable "`-C`"
* Sam James - provided fix for number.c build issue caused by missing stddef.h
* Jakub Wilk <jwilk@jwilk.net> - corrected README encoding
* [ikasty](https://github.com/ikasty) - added relative filename display to "`--watchfd`"
* [Michael Weiß](https://github.com/quitschbo) - corrected behaviour when not attached to a terminal
* [christoph-zededa](https://github.com/christoph-zededa) - provided OS X support for "`--watchfd`"
* [Dave Beckett](https://github.com/dajobe) - added "`@filename`" syntax to "`--size`", and corrected an autoconf problem with stat64 on OS X
* [Volodymyr Bychkovyak](https://github.com/vbychkoviak) - provided fix for rate limit behaviour with bursty traffic
---
-344
View File
@@ -1,344 +0,0 @@
UNRELEASED
- docs: moved all open issues into GitHub and updated the TODO list
- docs: renamed README to README.md and altered it to Markdown format
- docs: moved contributors from the README to docs/ACKNOWLEDGEMENTS.md
1.6.20 - 12 September 2021
- fix: add missing stddef.h include to number.c (Sam James)
1.6.19 - 5 September 2021
- fix: starting pv in the background no longer immediately stops unless
the transfer is to/from the terminal (Andriy Gapon, Jonathan Elchison)
- fix: using -B, -A, or -T now switches on -C implicitly
(Johannes Gerer, André Stapf)
- fix: AIX build fixes (Peter Korsgaard)
- i18n: updated German "--help" translations (Richard Fonfara)
- i18n: switched to UTF-8 encoding, added missing translations (de,fr,pt)
- docs: new "common switches" manual section (Jacek Wielemborek)
- docs: use placeholder instead of /dev/sda in the manual (Pranav Peshwe)
- docs: mention MacOS pipes and "-B 1024" in the manual (Jan Venekamp)
- docs: correct shell in autoconf/scripts/index.sh (Juan Picca)
- cleanup: various compiler warnings cleaned up
Full changelog is below:
- (r181) added common switches section to manual (Jacek Wielemborek)
- (r184) use placeholder instead of /dev/sda in the manual (Pranav Peshwe)
- (r185) replace ash with sh in autoconf/scripts/index.sh (Juan Picca)
- (r185) added note to manual about "-B 1024" in MacOS pipes (Jan Venekamp)
- (r185) fix AIX config check when the CWD contains "yes" (Peter Korsgaard)
- (r189) (#1556) updated German "--help" translations (Richard Fonfara)
- (r189) updated missing German translations and changed to UTF-8 encoding
- (r191) updated missing French translations and changed to UTF-8 encoding
- (r193) updated missing Portuguese translations, changed to UTF-8 encoding
- (r196) (#1563) using -B, -A, or -T now switches on -C implicitly
(Johannes Gerer, André Stapf)
- (r199) fixed numerous compiler warnings in newer GCC versions
- (r200,205) fixed bug where "pv /dev/zero >/dev/null &" stopped
immediately (Jonathan Elchison, Andriy Gapon)
- (r203,205) marked unused arguments with GCC unused attribute, started
using boolean data type for flags, corrected more compiler warnings
1.6.6 - 30 June 2017
- (r161) use %llu instead of %Lu for better compatibility (Eric A. Borisch)
- (r162) (#1532) fix target buffer size (-B) being ignored (AndCycle, Ilya
Basin, Antoine Beaupré)
- (r164) cap read/write sizes, and check elapsed time during read/write
cycles, to avoid display hangs with large buffers or slow media; also
remove select() call from repeated_write function as it slows the
transfer down and the wrapping alarm() means it is unnecessary
- (r169) (#1477) use alternate form for transfer counter, such that 13GB
is shown as 13.0GB so it's the same width as 13.1GB (André Stapf)
- (r171) cleanup: units corrections in man page, of the form kb -> KiB
- (r175) report error in "-d" if process fd directory is unreadable, or if
process disappears before we start the main loop (Jacek Wielemborek)
1.6.0 - 15 March 2015
- fix lstat64 support when unavailable - separate patches supplied by
Ganael Laplanche and Peter Korsgaard
- (#1506) new option "-D" / "--delay-start" to only show bar after N
seconds (Damon Harper)
- new option "--fineta" / "-I" to show ETA as time of day rather than time
remaining - patch supplied by Erkki Seppälä (r147)
- (#1509) change ETA (--eta / -e) so that days are given if the hours
remaining are 24 or more (Jacek Wielemborek)
- (#1499) repeat read and write attempts on partial buffer fill/empty to
work around post-signal transfer rate drop reported by Ralf Ramsauer
- (#1507) do not try to calculate total size in line mode, due to bug
reported by Jacek Wielemborek and Michiel Van Herwegen
- cleanup: removed defunct RATS comments and unnecessary copyright notices
- clean up displayed lines when using --watchfd PID, when PID exits
- output errors on a new line to avoid overwriting transfer bar
1.5.7 - 26 August 2014
- show KiB instead of incorrect kiB (Debian bug #706175)
- (#1284) do not gzip man page, for non-Linux OSes (Bob Friesenhahn)
- work around "awk" bug in tests/016-numeric-timer in decimal "," locales
- fix "make rpm" and "make srpm", extend "make release" to sign releases
1.5.3 - 4 May 2014
- remove SPLICE_F_NONBLOCK to fix problem with slow splice() (Jan Seda)
1.5.2 - 10 February 2014
- allow "--watchfd" to look at block devices
- let "--watchfd PID:FD" work with "--size N"
- moved contributors out of the manual as the list was too long
(NB everyone is still listed in the README and always will be)
1.5.1 - 23 January 2014
- new option "--watchfd" - suggested by Jacek Wielemborek and "fdwatch"
- use non-block flag with splice()
- new display option "--buffer-percent", suggested by Kim Krecht
- new display option "--last-written", suggested by Kim Krecht
- new transfer option "--no-splice"
- fix for minor bug which dropped display elements after one empty one
- fix for single fd leak on exit (Cristian Ciupitu)
1.4.12 - 5 August 2013
- new option "--null" - patch supplied by Zing Shishak
- AIX build fix (add "-lc128") - with help from Pawel Piatek
- AIX "-c" fixes - with help from Pawel Piatek
- SCO build fix (po2table.sh) - reported by Wouter Pronk
- test scripts fix for older distributions - patch from Bryan Dongray
- fix for splice() not using stdin - patch from Zev Weiss
1.4.6 - 22 January 2013
- added patch from Pawel Piatek to omit O_NOFOLLOW in AIX
1.4.5 - 10 January 2013
- updated manual page to show known problem with "-R" on Cygwin
1.4.4 - 11 December 2012
- added debugging, see `pv -h' when configure run with "--enable-debugging"
- rewrote cursor positioning code used when IPC is unavailable (Cygwin)
- fixed cursor positioning cursor read answerback problem (Cygwin/Solaris)
- fixed bug causing crash when progress displayed with too-small terminal
1.4.0 - 6 December 2012
- new option "--skip-errors" commissioned by Jim Salter
- if stdout is a block device, and we don't know the total size, use the
size of that block device as the total (Peter Samuelson)
- new option "--stop-at-size" to stop after "--size" bytes
- report correct filename on read errors
- fix use-after-free bug in remote PID cleanup code
- refactored large chunks of code to make it more readable and to replace
most static variables with a state structure
1.3.9 - 5 November 2012
- allow "--format" parameters to be sent with "--remote"
- configure option "--disable-ipc"
- added tests for --numeric with --timer and --bytes
- added tests for --remote
1.3.8 - 29 October 2012
- new "--pidfile" option to save process ID to a file
- integrated patch for --numeric with --timer and --bytes (Sami Liedes)
- removed signalling from --remote to prevent accidental process kills
- new "--format" option (originally Vladimir Pal / Vladimir Ermakov)
1.3.4 - 27 June 2012
- new "--disable-splice" configure script option
- fixed line mode size count with multiple files (Moritz Barsnick)
- fixes for AIX core dumps (Pawel Piatek)
1.3.1 - 9 June 2012
- do not use splice() if the write buffer is not empty (Thomas Rachel)
- added test 15 (pipe transfers), and new test script
1.3.0 - 5 June 2012
- added Tiger build patch from Olle Jonsson
- fix 1024-boundary display garble (Debian bug #586763)
- use splice(2) where available (Debian bug #601683)
- added known bugs section of the manual page
- fixed average rate test, 12 (Andrew Macheret)
- use IEEE1541 units (Thomas Rachel)
- bug with rate limit under 10 fixed (Henry Precheur)
- speed up PV line mode (patch: Guillaume Marcais)
- remove LD=ld from vars.mk to fix cross-compilation (paintitgray/PV#1291)
1.2.0 - 14 December 2010
- integrated improved SI prefixes and --average-rate (Henry Gebhardt)
- return nonzero if exiting due to SIGTERM (Martin Baum)
- patch from Phil Rutschman to restore terminal properly on exit
- fix i18n especially for --help (Sebastian Kayser)
- refactored pv_display
- we now have a coherent, documented, exit status
- modified pipe test and new cksum test from Sebastian Kayser
- default CFLAGS to just "-O" for non-GCC (Kjetil Torgrim Homme)
- LFS compile fix for OS X 10.4 (Alexandre de Verteuil)
- remove DESTDIR / suffix (Sam Nelson, Daniel Pape)
- fixed potential NULL deref in transfer (Elias Pipping / LLVM/Clang)
1.1.4 - 6 March 2008
- patch from Elias Pipping correcting compilation failure on Darwin 9
- patch from Patrick Collison correcting similar problems on OS X
- trap SIGINT/SIGHUP/SIGTERM so we clean up IPCs on exit (Laszlo Ersek)
- abort if numeric option, eg -L, has non-numeric value (Boris Lohner)
1.1.0 - 30 August 2007
- new option --remote (-R) to control an already-running process
- new option --line-mode (-l) to count lines instead of bytes
- fix for "-L" to be less resource intensive
- fix for input/output equivalence check on Mac OS X
- fix for size calculation in pipelines on Mac OS X
- fixed "make uninstall"
- removed /debian directory at request of new Debian maintainer
1.0.1 - 4 August 2007
- licensing change from Artistic to Artistic 2.0
- removed the "-l" / "--license" option
1.0.0 - 2 August 2007
- act more like "cat" - just skip unreadable files, don't abort
- removed text version of manual page, and obsolete Info file generation
- code cleanup and separation of PV internals from CLI front-end
0.9.9 - 5 February 2007
- new option --buffer-size (-B) suggested by Mark Tomich
- build fix: HP/UX largefile compile fix from Timo Savinen
- maintain better buffer filling during transfers
- workaround: pv /dev/zero | dd bs=1M count=1k bug (reported by Gert Menke)
- dropped support for the Texinfo manual
0.9.6 - 27 February 2006
- bugfix: key_t incompatibility with Cygwin
- bugfix: interval (-i) parameter parses numbers after decimal point
- build fix: use static NLS if msgfmt is unavailable
- on the final update, blank out the now-zero ETA
0.9.2 - 1 September 2005
- Daniel Roethlisberger patch: use lockfiles if terminal locking fails
0.9.1 - 16 June 2005
- minor RPM spec file fix for Fedora Core 4
0.9.0 - 15 November 2004
- minor NLS bugfix
0.8.9 - 6 November 2004
- decimal values now accepted for rate and size, eg "-L 1.23M"
- code cleanup
- developers: "make help" now lists Makefile targets
0.8.6 - 29 June 2004
- use uu_lock() for terminal locking on FreeBSD
0.8.5 - 2 May 2004
- cursor positioning (-c) reliability improved on systems with IPC
- minor fix: made test 005 more reliable
- new option --height (-H)
0.8.2 - 24 April 2004
- allow k,m,g,t suffixes on numbers
- added "srpm" and "release" Makefile targets
0.8.1 - 19 April 2004
- bugfix in cursor positioning (-c)
0.8.0 - 12 February 2004
- replaced GNU getopt with my library code
- replaced GNU gettext with my very minimal replacement
- use DESTDIR instead of RPM_BUILD_ROOT for optional installation prefix
- looked for flaws using RATS, cleaned up code
0.7.0 - 8 February 2004
- display buffer management fixes (thanks Cédric Delfosse)
- replaced --enable-debug with --enable-debugging and --enable-profiling
0.6.4 - 14 January 2004
- fixed minor bug in RPM installation
- bugfix in "make index" (only of interest to developers)
0.6.3 - 22 December 2003
- fixed transient bug that reported "resource unavailable" occasionally
0.6.2 - 6 August 2003
- block devices now have their size read correctly, so pv /dev/hda1 works
- minor code cleanups (mainly removal of CVS "Id" tags)
0.6.0 - 3 August 2003
- doing ^Z then "bg" then "fg" now continues displaying
0.5.9 - 23 July 2003
- fix for test 007 when not in C locale
- fix for build process to use CPPFLAGS
- fix for build process to use correct i18n libraries
- fix for build process - more portable sed in dependency generator
- fix for install process - remember to mkinstalldirs before installing
- fixes for building on Mac OS X
0.5.3 - 4 May 2003
- added Polish translation thanks to Bartosz Feñski
<fenio@o2.pl> <http://skawina.eu.org/> and Krystian Zubel
- moved doc/debian to ./debian at insistence of common sense
- minor Solaris 8 compatibility fixes
- seems to compile and test OK on Mac OS X
0.5.0 - 15 April 2003
- added French translation thanks to Stéphane Lacasse
<stephane@gorfou.ca>
- added German translation thanks to Marcos Kreinacke
<public@kreinacke.com>
- switched LGPL reference from "Library" to "Lesser"
0.4.9 - 18 February 2003
- support for >2GB files added where available (Debian bug #180986)
- added doc/debian dir (from Cédric Delfosse)
- added "make rpm" and "make deb" targets to build RPM and Debian packages
- added a "make pv-static" rule to build a statically linked version
0.4.5 - 13 December 2002
- added Portuguese (Brazilian) translation thanks to Eduardo Aguiar
0.4.4 - 7 December 2002
- pause/resume support - don't count time while stopped
- stop output when resumed in the background
- terminal size change support
- bugfix: <=> indicator no longer sticks at right hand edge
0.4.0 - 27 November 2002
- allow decimal interval values, eg 0.1, 0.5, etc
- some simple tests added (`make check')
- smoother throughput limiting (--rate-limit), now done in 0.1sec chunks
- bounds-check interval values (-i) - max update interval now 10 minutes
- more reliable non-blocking output to keep display updated
- no longer rely on atoll()
- don't output final blank line if --numeric
- use fcntl() instead of flock() for Solaris compatibility
0.3.0 - 25 November 2002
- handle broken output pipe gracefully
- continue updating display even when output pipe is blocking
0.2.6 - 21 October 2002
- we now ignore EINTR on select()
- variable-size buffer (still need to add code to change size)
- added (tentative) support for internationalisation
- removed superfluous --no-progress, etc options
- optimised transfer by using bigger buffers, based on st_blksize
- added --wait option to wait until transfer begins before showing progress
- added --rate-limit option to limit rate to a maximum throughput
- added --quiet option (no output at all) to be used with --rate-limit
0.2.5 - 23 July 2002
- added [FILE]... arguments, like `cat'
- function separation in code
- some bug fixes related to numeric overflow
0.2.3 - 19 July 2002
- Texinfo manual written, man page updated
- byte counter added
0.2.0 - 18 July 2002
- ETA counter added
- screen width estimation added
- progress bar added
0.1.0 - 17 July 2002
- main loop created
- rate counter added
- elapsed time counter added
- percentage calculation added
0.0.1 - 16 July 2002
- package created
- first draft of man page written
+330
View File
@@ -0,0 +1,330 @@
UNRELEASED
* dropped: support for Red Hat Enterprise Linux and its derivatives has been dropped; removed the RPM spec file, and will no longer build binaries
* fix: correction to `pv_in_foreground()` to behave as its comment block says it should, when not on a terminal - corrects [GH#19 "No output in Arch Linux initcpio after 1.6.6"](https://github.com/a-j-wood/pv/issues/19), [GH#55 "pv Stopped Working in the Background"](https://github.com/a-j-wood/pv/issues/55) (pull request [#64](https://github.com/a-j-wood/pv/pull/64) supplied by [Michael Weiß](https://github.com/quitschbo))
* fix: workaround for OS X 11 behaviour in configure script regarding stat64 at compile time (pull request [#57](https://github.com/a-j-wood/pv/pull/57) supplied by [Dave Beckett](https://github.com/dajobe))
* fix: add burst rate limit to transfer, so rate limits are not broken by bursty traffic (pull request [#62](https://github.com/a-j-wood/pv/pull/62) supplied by [Volodymyr Bychkovyak](https://github.com/vbychkoviak))
* feature: the "`--size`" option now accepts "`@filename`" to use the size of another file (pull request [#57](https://github.com/a-j-wood/pv/pull/57) supplied by [Dave Beckett](https://github.com/dajobe))
* feature: the "`--watchfd`" option is now available on OS X (pull request [#60](https://github.com/a-j-wood/pv/pull/60) supplied by [christoph-zededa](https://github.com/christoph-zededa))
* feature: the "`--watchfd`" option will now show relative filenames, if they are under the current directory (pull request [#66](https://github.com/a-j-wood/pv/pull/66) supplied by [ikasty](https://github.com/ikasty))
* docs: moved all open issues into GitHub and updated the TODO list
* docs: renamed README to README.md and altered it to Markdown format
* docs: moved contributors from the README to docs/ACKNOWLEDGEMENTS.md
* docs: moved TODO to TODO.md and altered it to Markdown format
* docs: moved NEWS to NEWS.md, converted it to UTF-8, and altered it to Markdown format
1.6.20 - 12 September 2021
* fix: add missing stddef.h include to number.c (Sam James)
1.6.19 - 5 September 2021
* fix: starting pv in the background no longer immediately stops unless the transfer is to/from the terminal (Andriy Gapon, Jonathan Elchison)
* fix: using "`-B`", "`-A`", or "`-T`" now switches on "`-C`" implicitly (Johannes Gerer, André Stapf)
* fix: AIX build fixes (Peter Korsgaard)
* i18n: updated German "`--help`" translations (Richard Fonfara)
* i18n: switched to UTF-8 encoding, added missing translations (de,fr,pt)
* docs: new "common switches" manual section (Jacek Wielemborek)
* docs: use placeholder instead of `/dev/sda` in the manual (Pranav Peshwe)
* docs: mention MacOS pipes and "`-B 1024`" in the manual (Jan Venekamp)
* docs: correct shell in `autoconf/scripts/index.sh` (Juan Picca)
* cleanup: various compiler warnings cleaned up
Full changelog is below:
* (r181) added common switches section to manual (Jacek Wielemborek)
* (r184) use placeholder instead of /dev/sda in the manual (Pranav Peshwe)
* (r185) replace ash with sh in autoconf/scripts/index.sh (Juan Picca)
* (r185) added note to manual about "`-B 1024`" in MacOS pipes (Jan Venekamp)
* (r185) fix AIX config check when the CWD contains "yes" (Peter Korsgaard)
* (r189) (#1556) updated German "`--help`" translations (Richard Fonfara)
* (r189) updated missing German translations and changed to UTF-8 encoding
* (r191) updated missing French translations and changed to UTF-8 encoding
* (r193) updated missing Portuguese translations, changed to UTF-8 encoding
* (r196) (#1563) using "`-B`", "`-A`", or "`-T`" now switches on "`-C`" implicitly (Johannes Gerer, André Stapf)
* (r199) fixed numerous compiler warnings in newer GCC versions
* (r200,205) fixed bug where "`pv /dev/zero >/dev/null &`" stopped immediately (Jonathan Elchison, Andriy Gapon)
* (r203,205) marked unused arguments with GCC unused attribute, started using boolean data type for flags, corrected more compiler warnings
1.6.6 - 30 June 2017
* (r161) use `%llu` instead of `%Lu` for better compatibility (Eric A. Borisch)
* (r162) (#1532) fix target buffer size ("`-B`") being ignored (AndCycle, Ilya Basin, Antoine Beaupré)
* (r164) cap read/write sizes, and check elapsed time during read/write cycles, to avoid display hangs with large buffers or slow media; also remove `select()` call from repeated_write function as it slows the transfer down and the wrapping `alarm()` means it is unnecessary
* (r169) (#1477) use alternate form for transfer counter, such that 13GB is shown as 13.0GB so it's the same width as 13.1GB (André Stapf)
* (r171) cleanup: units corrections in man page, of the form kb -> KiB
* (r175) report error in "`-d`" if process fd directory is unreadable, or if process disappears before we start the main loop (Jacek Wielemborek)
1.6.0 - 15 March 2015
* fix lstat64 support when unavailable - separate patches supplied by Ganael Laplanche and Peter Korsgaard
* (#1506) new option "`-D`" / "`--delay-start`" to only show bar after N seconds (Damon Harper)
* new option "`--fineta`" / "`-I`" to show ETA as time of day rather than time remaining - patch supplied by Erkki Seppälä (r147)
* (#1509) change ETA ("`--eta`" / "`-e`") so that days are given if the hours remaining are 24 or more (Jacek Wielemborek)
* (#1499) repeat read and write attempts on partial buffer fill/empty to work around post-signal transfer rate drop reported by Ralf Ramsauer
* (#1507) do not try to calculate total size in line mode, due to bug reported by Jacek Wielemborek and Michiel Van Herwegen
* cleanup: removed defunct RATS comments and unnecessary copyright notices
* clean up displayed lines when using "`--watchfd PID`", when PID exits
* output errors on a new line to avoid overwriting transfer bar
1.5.7 - 26 August 2014
* show KiB instead of incorrect kiB (Debian bug #706175)
* (#1284) do not gzip man page, for non-Linux OSes (Bob Friesenhahn)
* work around "awk" bug in `tests/016-numeric-timer` in decimal "," locales
* fix "`make rpm`" and "`make srpm`", extend "`make release`" to sign releases
1.5.3 - 4 May 2014
* remove *SPLICE_F_NONBLOCK* to fix problem with slow `splice()` (Jan Seda)
1.5.2 - 10 February 2014
* allow "`--watchfd`" to look at block devices
* let "`--watchfd PID:FD`" work with "`--size N`"
* moved contributors out of the manual as the list was too long (NB everyone is still listed in the README and always will be)
1.5.1 - 23 January 2014
* new option "`--watchfd`" - suggested by Jacek Wielemborek and "fdwatch"
* use non-block flag with `splice()`
* new display option "`--buffer-percent`", suggested by Kim Krecht
* new display option "`--last-written`", suggested by Kim Krecht
* new transfer option "`--no-splice`"
* fix for minor bug which dropped display elements after one empty one
* fix for single fd leak on exit (Cristian Ciupitu)
1.4.12 - 5 August 2013
* new option "`--null`" - patch supplied by Zing Shishak
* AIX build fix (add "`-lc128`") - with help from Pawel Piatek
* AIX "`-c`" fixes - with help from Pawel Piatek
* SCO build fix (`po2table.sh`) - reported by Wouter Pronk
* test scripts fix for older distributions - patch from Bryan Dongray
* fix for `splice()` not using stdin - patch from Zev Weiss
1.4.6 - 22 January 2013
* added patch from Pawel Piatek to omit *O_NOFOLLOW* in AIX
1.4.5 - 10 January 2013
* updated manual page to show known problem with "`-R`" on Cygwin
1.4.4 - 11 December 2012
* added debugging, see "`pv -h`" when `configure` is run with "`--enable-debugging`"
* rewrote cursor positioning code used when IPC is unavailable (Cygwin)
* fixed cursor positioning cursor read answerback problem (Cygwin/Solaris)
* fixed bug causing crash when progress displayed with too-small terminal
1.4.0 - 6 December 2012
* new option "`--skip-errors`" commissioned by Jim Salter
* if stdout is a block device, and we don't know the total size, use the size of that block device as the total (Peter Samuelson)
* new option "`--stop-at-size`" to stop after "`--size`" bytes
* report correct filename on read errors
* fix use-after-free bug in remote PID cleanup code
* refactored large chunks of code to make it more readable and to replace most static variables with a state structure
1.3.9 - 5 November 2012
* allow "`--format`" parameters to be sent with "`--remote`"
* configure option "`--disable-ipc`"
* added tests for "`--numeric`" with "`--timer`" and "`--bytes`"
* added tests for "`--remote`"
1.3.8 - 29 October 2012
* new "`--pidfile`" option to save process ID to a file
* integrated patch for "`--numeric`" with "`--timer`" and "`--bytes`" (Sami Liedes)
* removed signalling from "`--remote`" to prevent accidental process kills
* new "`--format`" option (originally Vladimir Pal / Vladimir Ermakov)
1.3.4 - 27 June 2012
* new "`--disable-splice`" configure script option
* fixed line mode size count with multiple files (Moritz Barsnick)
* fixes for AIX core dumps (Pawel Piatek)
1.3.1 - 9 June 2012
* do not use `splice()` if the write buffer is not empty (Thomas Rachel)
* added test 15 (pipe transfers), and new test script
1.3.0 - 5 June 2012
* added Tiger build patch from Olle Jonsson
* fix 1024-boundary display garble (Debian bug #586763)
* use `splice`(2) where available (Debian bug #601683)
* added known bugs section of the manual page
* fixed average rate test, 12 (Andrew Macheret)
* use IEEE1541 units (Thomas Rachel)
* bug with rate limit under 10 fixed (Henry Precheur)
* speed up PV line mode (patch: Guillaume Marcais)
* remove `LD=ld` from `vars.mk` to fix cross-compilation (paintitgray/PV#1291)
1.2.0 - 14 December 2010
* integrated improved SI prefixes and "`--average-rate`" (Henry Gebhardt)
* return nonzero if exiting due to *SIGTERM* (Martin Baum)
* patch from Phil Rutschman to restore terminal properly on exit
* fix i18n especially for "`--help`" (Sebastian Kayser)
* refactored `pv_display`
* we now have a coherent, documented, exit status
* modified pipe test and new cksum test from Sebastian Kayser
* default *CFLAGS* to just "`-O`" for non-GCC (Kjetil Torgrim Homme)
* LFS compile fix for OS X 10.4 (Alexandre de Verteuil)
* remove *DESTDIR* `/` suffix (Sam Nelson, Daniel Pape)
* fixed potential NULL deref in transfer (Elias Pipping / LLVM/Clang)
1.1.4 - 6 March 2008
* patch from Elias Pipping correcting compilation failure on Darwin 9
* patch from Patrick Collison correcting similar problems on OS X
* trap *SIGINT* / *SIGHUP* / *SIGTERM* so we clean up IPCs on exit (Laszlo Ersek)
* abort if numeric option, eg "`-L`", has non-numeric value (Boris Lohner)
1.1.0 - 30 August 2007
* new option "`--remote`" ("`-R`") to control an already-running process
* new option "`--line-mode`" ("`-l`") to count lines instead of bytes
* fix for "`-L`" to be less resource intensive
* fix for input/output equivalence check on Mac OS X
* fix for size calculation in pipelines on Mac OS X
* fixed "`make uninstall`"
* removed "`/debian`" directory at request of new Debian maintainer
1.0.1 - 4 August 2007
* licensing change from Artistic to Artistic 2.0
* removed the "`-l`" / "`--license`" option
1.0.0 - 2 August 2007
* act more like "`cat`" - just skip unreadable files, don't abort
* removed text version of manual page, and obsolete Info file generation
* code cleanup and separation of PV internals from CLI front-end
0.9.9 - 5 February 2007
* new option "`--buffer-size`" ("`-B`") suggested by Mark Tomich
* build fix: HP/UX largefile compile fix from Timo Savinen
* maintain better buffer filling during transfers
* workaround: "`pv /dev/zero | dd bs=1M count=1k`" bug (reported by Gert Menke)
* dropped support for the Texinfo manual
0.9.6 - 27 February 2006
* bugfix: `key_t` incompatibility with Cygwin
* bugfix: interval ("`-i`") parameter parses numbers after decimal point
* build fix: use static NLS if `msgfmt` is unavailable
* on the final update, blank out the now-zero ETA
0.9.2 - 1 September 2005
* Daniel Roethlisberger patch: use lockfiles if terminal locking fails
0.9.1 - 16 June 2005
* minor RPM spec file fix for Fedora Core 4
0.9.0 - 15 November 2004
* minor NLS bugfix
0.8.9 - 6 November 2004
* decimal values now accepted for rate and size, eg "`-L 1.23M`"
* code cleanup
* developers: "`make help`" now lists Makefile targets
0.8.6 - 29 June 2004
* use `uu_lock()` for terminal locking on FreeBSD
0.8.5 - 2 May 2004
* cursor positioning ("`-c`") reliability improved on systems with IPC
* minor fix: made test 005 more reliable
* new option "`--height`" ("`-H`")
0.8.2 - 24 April 2004
* allow k,m,g,t suffixes on numbers
* added "`srpm`" and "`release`" Makefile targets
0.8.1 - 19 April 2004
* bugfix in cursor positioning ("`-c`")
0.8.0 - 12 February 2004
* replaced GNU getopt with my library code
* replaced GNU gettext with my very minimal replacement
* use *DESTDIR* instead of *RPM_BUILD_ROOT* for optional installation prefix
* looked for flaws using RATS, cleaned up code
0.7.0 - 8 February 2004
* display buffer management fixes (thanks Cédric Delfosse)
* replaced "`--enable-debug`" with "`--enable-debugging`" and "`--enable-profiling`"
0.6.4 - 14 January 2004
* fixed minor bug in RPM installation
* bugfix in "`make index`" (only of interest to developers)
0.6.3 - 22 December 2003
* fixed transient bug that reported "resource unavailable" occasionally
0.6.2 - 6 August 2003
* block devices now have their size read correctly, so "`pv /dev/hda1`" works
* minor code cleanups (mainly removal of CVS "Id" tags)
0.6.0 - 3 August 2003
* doing *^Z* then "`bg`" then "`fg`" now continues displaying
0.5.9 - 23 July 2003
* fix for test 007 when not in C locale
* fix for build process to use *CPPFLAGS*
* fix for build process to use correct i18n libraries
* fix for build process - more portable sed in dependency generator
* fix for install process - remember to `mkinstalldirs` before installing
* fixes for building on Mac OS X
0.5.3 - 4 May 2003
* added Polish translation thanks to Bartosz Feński <fenio@o2.pl> <http://skawina.eu.org/> and Krystian Zubel
* moved `doc/debian` to `./debian` at insistence of common sense
* minor Solaris 8 compatibility fixes
* seems to compile and test OK on Mac OS X
0.5.0 - 15 April 2003
* added French translation thanks to Stéphane Lacasse <stephane@gorfou.ca>
* added German translation thanks to Marcos Kreinacke <public@kreinacke.com>
* switched LGPL reference from "Library" to "Lesser"
0.4.9 - 18 February 2003
* support for >2GB files added where available (Debian bug #180986)
* added `doc/debian` dir (from Cédric Delfosse)
* added "`make rpm`" and "`make deb`" targets to build RPM and Debian packages
* added a "`make pv-static`" rule to build a statically linked version
0.4.5 - 13 December 2002
* added Portuguese (Brazilian) translation thanks to Eduardo Aguiar
0.4.4 - 7 December 2002
* pause/resume support - don't count time while stopped
* stop output when resumed in the background
* terminal size change support
* bugfix: "`<=>`" indicator no longer sticks at right hand edge
0.4.0 - 27 November 2002
* allow decimal interval values, eg 0.1, 0.5, etc
* some simple tests added ("`make check`")
* smoother throughput limiting ("`--rate-limit`"), now done in 0.1sec chunks
* bounds-check interval values ("`-i`") - max update interval now 10 minutes
* more reliable non-blocking output to keep display updated
* no longer rely on `atoll()`
* don't output final blank line if "`--numeric`"
* use `fcntl()` instead of `flock()` for Solaris compatibility
0.3.0 - 25 November 2002
* handle broken output pipe gracefully
* continue updating display even when output pipe is blocking
0.2.6 - 21 October 2002
* we now ignore *EINTR* on `select()`
* variable-size buffer (still need to add code to change size)
* added (tentative) support for internationalisation
* removed superfluous "`--no-progress`", etc options
* optimised transfer by using bigger buffers, based on `st_blksize`
* added "`--wait`" option to wait until transfer begins before showing progress
* added "`--rate-limit`" option to limit rate to a maximum throughput
* added "`--quiet`" option (no output at all) to be used with "`--rate-limit`"
0.2.5 - 23 July 2002
* added *[FILE]...* arguments, like "`cat`"
* function separation in code
* some bug fixes related to numeric overflow
0.2.3 - 19 July 2002
* Texinfo manual written, man page updated
* byte counter added
0.2.0 - 18 July 2002
* ETA counter added
* screen width estimation added
* progress bar added
0.1.0 - 17 July 2002
* main loop created
* rate counter added
* elapsed time counter added
* percentage calculation added
0.0.1 - 16 July 2002
* package created
* first draft of man page written
-55
View File
@@ -1,55 +0,0 @@
Things still to do. (GH#n) indicates the Github issue tracker number.
Bugs:
- (GH#5) Transfer IPC leadership on exit of leader
- (GH#13) Use clock_gettime() in ETA calculation to cope with machine suspend/resume (Mateju Miroslav)
- (GH#16) Show days in same format in ETA as in elapsed time
- (GH#18) No output in Cygwin from 1.6.19 onwards (Jacek M. Holeczek)
- (GH#19) No output in Arch Linux initcpio after 1.6.6 (lacsaP)
- (GH#20) Terminal state is not restored correctly in all cases (VA)
- (GH#23) No output with -f when run in background after 1.6.6 (gray)
- (GH#24) Race condition with multiple "pv -c" leaves terminal state inconsistent (Lars Ellenberg, Viktor Ashirov)
- (GH#26) Correct "-n" behaviour when going past 100% of "-s" size (Marcel)
- (GH#27) Rate limit downgrade can take a long time to take effect (Stephen Kitt)
- (GH#31) No output written from inside zsh <() construct (Frederik Eaton - Dec 2015)
- (GH#32) Apply rate limits instantaneously, not averaged over the whole transfer (Jered Floyd - Dec 2018)
- (GH#33) Fix compilation problems due to stat64() on Apple Silicon (Filippo Valsorda - Jan 2021)
- (GH#34) Continue timer even if input or output is blocking (Martin Probst - Jun 2017)
Feature requests:
- (GH#3) Option (-x?) to use xterm title line for status (Joachim Haga)
- (GH#4) Option for process title (Martin Sarsale) as "pv - name:FooProcess -xyz - transferred: 1.3GB - 500KB/s - running: 10:15:30s"
- (GH#6) Look at effect of O_SYNC or fsync on performance; update counters during buffer flush (
- (GH#9) Option to switch rate to per minute if really slow
- (GH#10) Add watchfd tests
- (GH#11) Option "--progress-from FILE", read last number and use it as bytes read (Jacek Wielemborek)
- (GH#12) Allow multiple -d options (Linus Heckemann for multiple PID:FD; Jacek Wielemborek)
- (GH#14) Momentary ETA option (Luc Gommans)
- (GH#15) Use Unicode for more granular progress bar (Alexander Petrossian)
- (GH#17) Allow -r with -l and -n to output lines/sec (Roland Kletzing)
- (GH#21) Options to change the units in the rate display (Jeffrey Paul, John W. O'Brien, David Henderson)
- (GH#22) Options to skip input and seek on output (Jason A. Pfeil, Feb 2022)
- (GH#25) Normalise progress to 100% on overrun (Andrej Gantvorg)
- (GH#28) Calculate ETA based on current average rate instead of global average (Matt, Christoph Biedl)
- (GH#29) Option to enable O_DIRECT (Romain Kang, Jacek Wielemborek)
- (GH#30) Option for dynamic interval to improve ETA predictions for long-running transfers (Christoph Biedl)
- (GH#35) Allow decimal values for -s, -L, -B (Thomas Watson - Aug 2020)
- (GH#36) Ignore SIGWINCH (window size change) if -w / -H provided
- (GH#37) Allow -E to take a block size argument so errors cause a skip to the next block (Anthony DeRobertis - Oct 2016)
- (GH#38) Reset ETA on SIGUSR1 (Jacek Wielemborek - Jan 2019)
- (GH#39) Use posix_fadvise() like cat(1) does (Jacek Wielemborek - Oct 2015)
- (GH#40) Permit -c with -d PID:FD, reject -N with -d PID (Norman Rasmussen - Nov 2020)
- (GH#41) Improve how backwards-moving reads are shown in --watchfd (Ryan Cooley - Dec 2017)
- (GH#42) Option to discard stdin so nothing is written to stdout (André Stapf - Apr 2017)
- (GH#43) Differentiate between "--eta" and "--fineta" in display (André Stapf - Apr 2017)
- (GH#44) Specify size for "-s" by pointing to a filename to use the size of
- (GH#45) Option --sparse (with block size option) to write sparse output (Andriy Galetski - Apr 2019)
- (GH#46) Option to show speed gauge (% max speed) if progress not known (Ryan Cooley - Jun 2019)
- (GH#47) Analyse splice and buffer usage to improve performance
- (GH#48) Option to show multiple files with individual sizes and a cumulative total (Zach Riggle - Jul 2021)
- (GH#49) Option to provide stats for avg/min/max/stddev throughput (Venky.N.Iyer)
- (GH#50) Allow pv to report on a whole pipeline at once (Will Entriken - Feb 2011)
Any assistance would be appreciated.
+57
View File
@@ -0,0 +1,57 @@
Things still to do. (GH#n) indicates the Github issue tracker number.
Bugs
----
* ([GH#5](https://github.com/a-j-wood/pv/issues/5)) Transfer IPC leadership on exit of leader
* ([GH#13](https://github.com/a-j-wood/pv/issues/13)) Use `clock_gettime()` in ETA calculation to cope with machine suspend/resume (Mateju Miroslav)
* ([GH#16](https://github.com/a-j-wood/pv/issues/16)) Show days in same format in ETA as in elapsed time
* ([GH#18](https://github.com/a-j-wood/pv/issues/18)) No output in Cygwin from 1.6.19 onwards (Jacek M. Holeczek)
* ([GH#20](https://github.com/a-j-wood/pv/issues/20)) Terminal state is not restored correctly in all cases (VA)
* ([GH#23](https://github.com/a-j-wood/pv/issues/23)) No output with "`-f`" when run in background after 1.6.6 (gray)
* ([GH#24](https://github.com/a-j-wood/pv/issues/24)) Race condition with multiple "`pv -c`" leaves terminal state inconsistent (Lars Ellenberg, Viktor Ashirov)
* ([GH#26](https://github.com/a-j-wood/pv/issues/26)) Correct "`-n`" behaviour when going past 100% of "`-s`" size (Marcel)
* ([GH#27](https://github.com/a-j-wood/pv/issues/27)) Rate limit downgrade can take a long time to take effect (Stephen Kitt)
* ([GH#31](https://github.com/a-j-wood/pv/issues/31)) No output written from inside zsh `<()` construct (Frederik Eaton - Dec 2015)
* ([GH#33](https://github.com/a-j-wood/pv/issues/33)) Fix compilation problems due to `stat64()` on Apple Silicon (Filippo Valsorda - Jan 2021)
* ([GH#34](https://github.com/a-j-wood/pv/issues/34)) Continue timer even if input or output is blocking (Martin Probst - Jun 2017)
Feature requests
----------------
* ([GH#3](https://github.com/a-j-wood/pv/issues/3)) Option ("`-x`"?) to use xterm title line for status (Joachim Haga)
* ([GH#4](https://github.com/a-j-wood/pv/issues/4)) Option for process title (Martin Sarsale) as "`pv - name:FooProcess -xyz - transferred: 1.3GB - 500KB/s - running: 10:15:30s`"
* ([GH#6](https://github.com/a-j-wood/pv/issues/6)) Look at effect of *O_SYNC* or `fsync` on performance; update counters during buffer flush
* ([GH#9](https://github.com/a-j-wood/pv/issues/9)) Option to switch rate to per minute if really slow
* ([GH#10](https://github.com/a-j-wood/pv/issues/10)) Add watchfd tests
* ([GH#11](https://github.com/a-j-wood/pv/issues/11)) Option "`--progress-from FILE`", read last number and use it as bytes read (Jacek Wielemborek)
* ([GH#12](https://github.com/a-j-wood/pv/issues/12)) Allow multiple "`-d`" options (Linus Heckemann for multiple PID:FD; Jacek Wielemborek)
* ([GH#14](https://github.com/a-j-wood/pv/issues/14)) Momentary ETA option (Luc Gommans)
* ([GH#15](https://github.com/a-j-wood/pv/issues/15)) Use Unicode for more granular progress bar (Alexander Petrossian)
* ([GH#17](https://github.com/a-j-wood/pv/issues/17)) Allow "`-r`" with "`-l`" and "`-n`" to output lines/sec (Roland Kletzing)
* ([GH#21](https://github.com/a-j-wood/pv/issues/21)) Options to change the units in the rate display (Jeffrey Paul, John W. O'Brien, David Henderson)
* ([GH#22](https://github.com/a-j-wood/pv/issues/22)) Options to skip input and seek on output (Jason A. Pfeil, Feb 2022)
* ([GH#25](https://github.com/a-j-wood/pv/issues/25)) Normalise progress to 100% on overrun (Andrej Gantvorg)
* ([GH#28](https://github.com/a-j-wood/pv/issues/28)) Calculate ETA based on current average rate instead of global average (Matt, Christoph Biedl)
* ([GH#29](https://github.com/a-j-wood/pv/issues/29)) Option to enable *O_DIRECT* (Romain Kang, Jacek Wielemborek)
* ([GH#30](https://github.com/a-j-wood/pv/issues/30)) Option for dynamic interval to improve ETA predictions for long-running transfers (Christoph Biedl)
* ([GH#35](https://github.com/a-j-wood/pv/issues/35)) Allow decimal values for "`-s`", "`-L`", "`-B`" (Thomas Watson - Aug 2020)
* ([GH#36](https://github.com/a-j-wood/pv/issues/36)) Ignore *SIGWINCH* (window size change) if "`-w`" / "`-H`" provided
* ([GH#37](https://github.com/a-j-wood/pv/issues/37)) Allow "`-E`" to take a block size argument so errors cause a skip to the next block (Anthony DeRobertis - Oct 2016)
* ([GH#38](https://github.com/a-j-wood/pv/issues/38)) Reset ETA on *SIGUSR1* (Jacek Wielemborek - Jan 2019)
* ([GH#39](https://github.com/a-j-wood/pv/issues/39)) Use `posix_fadvise()` like `cat`(1) does (Jacek Wielemborek - Oct 2015)
* ([GH#40](https://github.com/a-j-wood/pv/issues/40)) Permit "`-c`" with "`-d PID:FD`", reject "`-N`" with "`-d PID`" (Norman Rasmussen - Nov 2020)
* ([GH#41](https://github.com/a-j-wood/pv/issues/41)) Improve how backwards-moving reads are shown in "`--watchfd`" (Ryan Cooley - Dec 2017)
* ([GH#42](https://github.com/a-j-wood/pv/issues/42)) Option to discard stdin so nothing is written to stdout (André Stapf - Apr 2017)
* ([GH#43](https://github.com/a-j-wood/pv/issues/43)) Differentiate between "`--eta`" and "`--fineta`" in display (André Stapf - Apr 2017)
* ([GH#45](https://github.com/a-j-wood/pv/issues/45)) Option "`--sparse`" (with block size option) to write sparse output (Andriy Galetski - Apr 2019)
* ([GH#46](https://github.com/a-j-wood/pv/issues/46)) Option to show speed gauge (% max speed) if progress not known (Ryan Cooley - Jun 2019)
* ([GH#47](https://github.com/a-j-wood/pv/issues/47)) Analyse splice and buffer usage to improve performance
* ([GH#48](https://github.com/a-j-wood/pv/issues/48)) Option to show multiple files with individual sizes and a cumulative total (Zach Riggle - Jul 2021)
* ([GH#49](https://github.com/a-j-wood/pv/issues/49)) Option to provide stats for avg/min/max/stddev throughput (Venky.N.Iyer)
* ([GH#50](https://github.com/a-j-wood/pv/issues/50)) Allow pv to report on a whole pipeline at once (Will Entriken - Feb 2011)
* ([GH#54](https://github.com/a-j-wood/pv/issues/54)) Run command every n percent ([haarp](https://github.com/haarp))
* ([GH#56](https://github.com/a-j-wood/pv/issues/56)) Support for backgrounding pv, and allowing it to be monitored separately ([jimbobmcgee](https://github.com/jimbobmcgee))
* ([GH#67](https://github.com/a-j-wood/pv/issues/67)) Wrap another process to monitor its stdin & stdout ([Alex Mason](https://github.com/axman6))
Any assistance would be appreciated.
+12 -1
View File
@@ -243,7 +243,18 @@ etc can be used as with
.BR -L .
.TP
.B ""
Has no effect if used with
If
.B SIZE
starts with
.BR "@" ,
the size of file whose name follows the
.B @
will be used.
.TP
.B ""
Note that
.B \-\-size
has no effect if used with
.B -d PID
to watch all file descriptors of a process, but will work with
.BR "-d PID:FD" .
-1
View File
@@ -4,7 +4,6 @@ Before releasing a new version, go through this checklist:
- bump doc/VERSION
- bump doc/lsm.in
- check doc/NEWS is up to date
- check doc/spec.in is up to date (changelog)
- check manual is up to date
- make indent indentclean
- make update-po
-266
View File
@@ -1,266 +0,0 @@
Summary: Monitor the progress of data through a pipe
Name: @PACKAGE@
Version: @VERSION@
Release: 1%{?dist}
License: Artistic 2.0
Group: Development/Tools
Source: http://www.ivarch.com/programs/sources/@PACKAGE@-@VERSION@.tar.gz
Url: http://www.ivarch.com/programs/pv.shtml
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: gettext
%description
PV ("Pipe Viewer") is a tool for monitoring the progress of data through a
pipeline. It can be inserted into any normal pipeline between two processes
to give a visual indication of how quickly data is passing through, how long
it has taken, how near to completion it is, and an estimate of how long it
will be until completion.
%prep
%setup -q
%build
%configure
make %{?_smp_mflags}
%install
[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf "$RPM_BUILD_ROOT"
mkdir -p "$RPM_BUILD_ROOT"%{_bindir}
mkdir -p "$RPM_BUILD_ROOT"%{_mandir}/man1
mkdir -p "$RPM_BUILD_ROOT"/usr/share/locale
make DESTDIR="$RPM_BUILD_ROOT" install
%find_lang %{name}
%check
make test
%clean
[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf "$RPM_BUILD_ROOT"
%files -f %{name}.lang
%defattr(-, root, root)
%{_bindir}/%{name}
%{_mandir}/man1/%{name}.1.gz
%doc README.md doc/ACKNOWLEDGEMENTS.md doc/NEWS doc/TODO doc/COPYING
%changelog
* Sun Sep 12 2021 Andrew Wood <andrew.wood@ivarch.com> 1.6.20-1
- fix: add missing stddef.h include to number.c (Sam James)
* Sun Sep 5 2021 Andrew Wood <andrew.wood@ivarch.com> 1.6.19-1
- fix: starting pv in the background no longer immediately stops unless
- the transfer is to/from the terminal (Andriy Gapon, Jonathan Elchison)
- fix: using -B, -A, or -T now switches on -C implicitly
- (Johannes Gerer, André Stapf)
- fix: AIX build fixes (Peter Korsgaard)
- i18n: updated German "--help" translations (Richard Fonfara)
- i18n: switched to UTF-8 encoding, added missing translations (de,fr,pt)
- docs: new "common switches" manual section (Jacek Wielemborek)
- docs: use placeholder instead of /dev/sda in the manual (Pranav Peshwe)
- docs: mention MacOS pipes and "-B 1024" in the manual (Jan Venekamp)
- docs: correct shell in autoconf/scripts/index.sh (Juan Picca)
- cleanup: various compiler warnings cleaned up
* Fri Jun 30 2017 Andrew Wood <andrew.wood@ivarch.com> 1.6.6-1
- (r161) use %llu instead of %Lu for better compatibility (Eric A. Borisch)
- (r162) (#1532) fix target buffer size (-B) being ignored (AndCycle, Ilya
- Basin, Antoine Beaupré)
- (r164) cap read/write sizes, and check elapsed time during read/write
- cycles, to avoid display hangs with large buffers or slow media; also
- remove select() call from repeated_write function as it slows the
- transfer down and the wrapping alarm() means it is unnecessary
- (r169) (#1477) use alternate form for transfer counter, such that 13GB
- is shown as 13.0GB so it's the same width as 13.1GB (André Stapf)
- (r171) cleanup: units corrections in man page, of the form kb -> KiB
- (r175) report error in "-d" if process fd directory is unreadable, or if
- process disappears before we start the main loop (Jacek Wielemborek)
* Sun Mar 15 2015 Andrew Wood <andrew.wood@ivarch.com> 1.6.0-1
- fix lstat64 support when unavailable - separate patches supplied by Ganael
- Laplanche and Peter Korsgaard
- (#1506) new option "-D" / "--delay-start" to only show bar after N seconds
- (Damon Harper)
- new option "--fineta" / "-I" to show ETA as time of day rather than time
- remaining - patch supplied by Erkki Seppälä (r147)
- (#1509) change ETA (--eta / -e) so that days are given if the hours
- remaining are 24 or more (Jacek Wielemborek)
- (#1499) repeat read and write attempts on partial buffer fill/empty to
- work around post-signal transfer rate drop reported by Ralf Ramsauer
- (#1507) do not try to calculate total size in line mode, due to bug
- reported by Jacek Wielemborek and Michiel Van Herwegen
- cleanup: removed defunct RATS comments and unnecessary copyright notices
- clean up displayed lines when using --watchfd PID, when PID exits
- output errors on a new line to avoid overwriting transfer bar
* Tue Aug 26 2014 Andrew Wood <andrew.wood@ivarch.com> 1.5.7-1
- show KiB instead of incorrect kiB (Debian bug #706175)
- (#1284) do not gzip man page, for non-Linux OSes (Bob Friesenhahn)
- work around "awk" bug in tests/016-numeric-timer in decimal "," locales
- fix "make rpm" and "make srpm", extend "make release" to sign releases
* Sun May 4 2014 Andrew Wood <andrew.wood@ivarch.com> 1.5.3-1
- remove SPLICE_F_NONBLOCK to fix problem with slow splice() (Jan Seda)
* Mon Feb 10 2014 Andrew Wood <andrew.wood@ivarch.com> 1.5.2-1
- allow "--watchfd" to look at block devices
- let "--watchfd PID:FD" work with "--size N"
- moved contributors out of the manual as the list was too long
- (NB everyone is still listed in the README and always will be)
* Thu Jan 23 2014 Andrew Wood <andrew.wood@ivarch.com> 1.5.1-1
- new option "--watchfd" - suggested by Jacek Wielemborek and "fdwatch"
- use non-block flag with splice()
- new display option "--buffer-percent", suggested by Kim Krecht
- new display option "--last-written", suggested by Kim Krecht
- new transfer option "--no-splice"
- fix for minor bug which dropped display elements after one empty one
- fix for single fd leak on exit (Cristian Ciupitu, Josh Stone)
* Mon Aug 5 2013 Andrew Wood <andrew.wood@ivarch.com> 1.4.12-1
- new option "--null" - patch supplied by Zing Shishak
- AIX build fix (add "-lc128") - with help from Pawel Piatek
- AIX "-c" fixes - with help from Pawel Piatek
- SCO build fix (po2table.sh) - reported by Wouter Pronk
- test scripts fix for older distributions - patch from Bryan Dongray
- fix for splice() not using stdin - patch from Zev Weiss
* Tue Jan 22 2013 Andrew Wood <andrew.wood@ivarch.com> 1.4.6-1
- added patch from Pawel Piatek to omit O_NOFOLLOW in AIX
* Thu Jan 10 2013 Andrew Wood <andrew.wood@ivarch.com> 1.4.5-1
- updated manual page to show known problem with "-R" on Cygwin
* Tue Dec 11 2012 Andrew Wood <andrew.wood@ivarch.com> 1.4.4-1
- added debugging, see `pv -h' when configure run with "--enable-debugging"
- rewrote cursor positioning code used when IPC is unavailable (Cygwin)
- fixed cursor positioning cursor read answerback problem (Cygwin/Solaris)
- fixed bug causing crash when progress displayed with too-small terminal
* Thu Dec 6 2012 Andrew Wood <andrew.wood@ivarch.com> 1.4.0-1
- new option "--skip-errors" commissioned by Jim Salter
- if stdout is a block device, and we don't know the total size, use the
- size of that block device as the total (Peter Samuelson)
- new option "--stop-at-size" to stop after "--size" bytes
- report correct filename on read errors
- fix use-after-free bug in remote PID cleanup code
- refactored large chunks of code to make it more readable and to replace
- most static variables with a state structure
* Mon Nov 5 2012 Andrew Wood <andrew.wood@ivarch.com> 1.3.9-1
- allow "--format" parameters to be sent with "--remote"
- configure option "--disable-ipc"
- added tests for --numeric with --timer and --bytes
- added tests for --remote
* Mon Oct 29 2012 Andrew Wood <andrew.wood@ivarch.com> 1.3.8-1
- new "--pidfile" option to save process ID to a file
- integrated patch for --numeric with --timer and --bytes (Sami Liedes)
- removed signalling from --remote to prevent accidental process kills
- new "--format" option (originally Vladimir Pal / Vladimir Ermakov)
* Wed Jun 27 2012 Andrew Wood <andrew.wood@ivarch.com> 1.3.4-1
- new "--disable-splice" configure script option
- fixed line mode size count with multiple files (Moritz Barsnick)
- fixes for AIX core dumps (Pawel Piatek)
* Sat Jun 9 2012 Andrew Wood <andrew.wood@ivarch.com> 1.3.1-1
- do not use splice() if the write buffer is not empty (Thomas Rachel)
- added test 15 (pipe transfers), and new test script
* Tue Jun 5 2012 Andrew Wood <andrew.wood@ivarch.com> 1.3.0-1
- added Tiger build patch from Olle Jonsson.
- fix 1024-boundary display garble (Debian bug #586763).
- use splice(2) where available (Debian bug #601683).
- added known bugs section of the manual page.
- fixed average rate test, 12 (Andrew Macheret).
- use IEEE1541 units (Thomas Rachel).
- bug with rate limit under 10 fixed (Henry Precheur).
- speed up PV line mode (patch: Guillaume Marcais).
- remove LD=ld from vars.mk to fix cross-compilation (paintitgray/PV#1291).
* Tue Dec 14 2010 Andrew Wood <andrew.wood@ivarch.com> 1.2.0-1
- Integrated improved SI prefixes and --average-rate (Henry Gebhardt).
- Return nonzero if exiting due to SIGTERM (Martin Baum).
- Patch from Phil Rutschman to restore terminal properly on exit.
- Fix i18n especially for --help (Sebastian Kayser).
- Refactored pv_display.
- We now have a coherent, documented, exit status.
- Modified pipe test and new cksum test from Sebastian Kayser.
- Default CFLAGS to just "-O" for non-GCC (Kjetil Torgrim Homme).
- LFS compile fix for OS X 10.4 (Alexandre de Verteuil).
- Remove DESTDIR / suffix (Sam Nelson, Daniel Pape).
- Fixed potential NULL deref in transfer (Elias Pipping / LLVM/Clang).
* Thu Mar 6 2008 Andrew Wood <andrew.wood@ivarch.com> 1.1.4-1
- Trap SIGINT/SIGHUP/SIGTERM so we clean up IPCs on exit (Laszlo Ersek).
- Abort if numeric option, eg -L, has non-numeric value (Boris Lohner).
- Compilation fixes for Darwin 9 and OS X.
* Thu Aug 30 2007 Andrew Wood <andrew.wood@ivarch.com> 1.1.0-1
- New option "-R" to remotely control another @PACKAGE@ process.
- New option "-l" to count lines instead of bytes.
- Performance improvement for "-L" (rate) option.
- Some Mac OS X fixes, and packaging cleanups.
* Sat Aug 4 2007 Andrew Wood <andrew.wood@ivarch.com> 1.0.1-1
- Changed license from Artistic to Artistic 2.0.
- Removed "--license" option.
* Thu Aug 2 2007 Andrew Wood <andrew.wood@ivarch.com> 1.0.0-1
- We now act more like "cat" - just skip unreadable files, don't abort.
- Various code cleanups were done.
* Mon Feb 5 2007 Andrew Wood <andrew.wood@ivarch.com> 0.9.9-1
- New option "-B" to set the buffer size, and a workaround for problems
- piping to dd(1).
* Mon Feb 27 2006 Andrew Wood <andrew.wood@ivarch.com>
- Minor bugfixes, and on the final update, blank out the now-zero ETA.
* Thu Sep 1 2005 Andrew Wood <andrew.wood@ivarch.com>
- Terminal locking now uses lockfiles if the terminal itself cannot be locked.
* Thu Jun 16 2005 Andrew Wood <andrew.wood@ivarch.com>
- A minor problem with the spec file was fixed.
* Mon Nov 15 2004 Andrew Wood <andrew.wood@ivarch.com>
- A minor bug in the NLS code was fixed.
* Sat Nov 6 2004 Andrew Wood <andrew.wood@ivarch.com>
- Code cleanups and minor usability fixes.
* Tue Jun 29 2004 Andrew Wood <andrew.wood@ivarch.com>
- A port of the terminal locking code to FreeBSD.
* Sun May 2 2004 Andrew Wood <andrew.wood@ivarch.com>
- Major reliability improvements to the cursor positioning.
* Sat Apr 24 2004 Andrew Wood <andrew.wood@ivarch.com>
- Rate and size parameters can now take suffixes such as "k", "m" etc.
* Mon Apr 19 2004 Andrew Wood <andrew.wood@ivarch.com>
- A bug in the cursor positioning was fixed.
* Thu Feb 12 2004 Andrew Wood <andrew.wood@ivarch.com>
- Code cleanups and portability fixes.
* Sun Feb 8 2004 Andrew Wood <andrew.wood@ivarch.com>
- The display buffer is now dynamically allocated, fixing an overflow bug.
* Wed Jan 14 2004 Andrew Wood <andrew.wood@ivarch.com>
- A minor bug triggered when installing the RPM was fixed.
* Mon Dec 22 2003 Andrew Wood <andrew.wood@ivarch.com>
- Fixed a minor bug that occasionally reported "resource unavailable".
* Wed Aug 6 2003 Andrew Wood <andrew.wood@ivarch.com>
- Block devices now have their size read correctly, so pv /dev/hda1 works
- Minor code cleanups (mainly removal of CVS "Id" tags)
* Sun Aug 3 2003 Andrew Wood <andrew.wood@ivarch.com>
- Doing ^Z then "bg" then "fg" now continues displaying
* Tue Jul 16 2002 Andrew Wood <andrew.wood@ivarch.com>
- First draft of spec file created.
+5
View File
@@ -34,6 +34,7 @@ extern "C" {
#define PV_DISPLAY_FINETA 512
#define RATE_GRANULARITY 100000 /* usec between -L rate chunks */
#define RATE_BURST_WINDOW 5 /* rate burst window (multiples of rate) */
#define REMOTE_INTERVAL 100000 /* usec between checks for -R */
#define BUFFER_SIZE 409600 /* default transfer buffer size */
#define BUFFER_SIZE_MAX 524288 /* max auto transfer buffer size */
@@ -91,6 +92,7 @@ struct pvstate_s {
* Program status *
******************/
const char *program_name; /* program name for error reporting */
char cwd[4096]; /* current working directory for relative path */
const char *current_file; /* current file being read */
int exit_status; /* exit status to give (0=OK) */
@@ -227,8 +229,11 @@ struct pvstate_s {
struct pvwatchfd_s {
unsigned int watch_pid; /* PID to watch */
int watch_fd; /* fd to watch, -1 = not displayed */
#ifdef __APPLE__
#else
char file_fdinfo[4096]; /* path to /proc fdinfo file */
char file_fd[4096]; /* path to /proc fd symlink */
#endif
char file_fdpath[4096]; /* path to file that was opened */
char display_name[512]; /* name to show on progress bar */
struct stat64 sb_fd; /* stat of fd symlink */
+30 -2
View File
@@ -8,11 +8,13 @@
#include "options.h"
#include "library/getopt.h"
#include "pv.h"
#include "pv-internal.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/stat.h>
#include <unistd.h>
@@ -140,6 +142,9 @@ opts_t opts_parse(int argc, char **argv)
*/
switch (c) {
case 's':
/* "-s @" is valid, so allow it. */
if ('@' == *optarg)
break;
case 'A':
case 'w':
case 'H':
@@ -260,7 +265,29 @@ opts_t opts_parse(int argc, char **argv)
opts->delay_start = pv_getnum_d(optarg);
break;
case 's':
opts->size = pv_getnum_ull(optarg);
/* Permit "@<filename>" as well as just a number. */
if ('@' == *optarg) {
const char *size_file = 1 + optarg;
struct stat64 sb;
int rc;
rc = 0;
memset(&sb, 0, sizeof(sb));
rc = stat64(size_file, &sb);
if (0 == rc) {
opts->size = sb.st_size;
} else {
fprintf(stderr, "%s: %s %s: %s\n",
opts->program_name,
_("failed to stat file"),
size_file,
strerror(errno));
opts_free(opts);
return NULL;
}
} else {
opts->size = pv_getnum_ull(optarg);
}
break;
case 'l':
opts->linemode = true;
@@ -367,7 +394,7 @@ opts_t opts_parse(int argc, char **argv)
opts_free(opts);
return NULL;
}
#ifndef __APPLE__
if (0 != access("/proc/self/fdinfo", X_OK)) {
fprintf(stderr, "%s: -d: %s\n", opts->program_name,
_
@@ -375,6 +402,7 @@ opts_t opts_parse(int argc, char **argv)
opts_free(opts);
return NULL;
}
#endif
}
/*
+4
View File
@@ -48,6 +48,10 @@ bool pv_in_foreground(void)
our_process_group = getpgrp();
tty_process_group = tcgetpgrp(STDERR_FILENO);
if (tty_process_group == -1 && errno == ENOTTY)
return true;
if (our_process_group == tty_process_group)
return true;
+5
View File
@@ -151,10 +151,15 @@ int pv_main_loop(pvstate_t state)
|| (cur_time.tv_sec == next_ratecheck.tv_sec
&& cur_time.tv_usec >=
next_ratecheck.tv_usec)) {
target +=
((long double) (state->rate_limit)) /
(long double) (1000000 /
RATE_GRANULARITY);
long double burstMax = ((long double) (state->rate_limit * RATE_BURST_WINDOW));
if (target > burstMax) {
target = burstMax;
}
pv_timeval_add_usec(&next_ratecheck,
RATE_GRANULARITY);
}
+14
View File
@@ -8,6 +8,7 @@
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <unistd.h>
/* alloc / realloc history buffer */
@@ -51,6 +52,19 @@ pvstate_t pv_state_alloc(const char *program_name)
#endif /* HAVE_SPLICE */
state->display_visible = false;
/*
* Get the current working directory, if possible, as a base for
* showing relative filenames with --watchfd.
*/
if (NULL == getcwd(state->cwd, sizeof(state->cwd))) {
/* failed - will always show full path */
state->cwd[0] = '\0';
}
if ('\0' == state->cwd[1]) {
/* CWD is root directory - always show full path */
state->cwd[0] = '\0';
}
return state;
}
+201 -28
View File
@@ -20,6 +20,100 @@
#include <sys/types.h>
#include <dirent.h>
#ifdef __APPLE__
#include <libproc.h>
#include <sys/proc_info.h>
#endif
int filesize(pvwatchfd_t info)
{
if (S_ISBLK(info->sb_fd.st_mode)) {
int fd;
/*
* Get the size of block devices by opening
* them and seeking to the end.
*/
fd = open64(info->file_fdpath, O_RDONLY);
if (fd >= 0) {
info->size = lseek64(fd, 0, SEEK_END);
close(fd);
} else {
info->size = 0;
}
} else if (S_ISREG(info->sb_fd.st_mode)) {
if ((info->sb_fd_link.st_mode & S_IWUSR) == 0) {
info->size = info->sb_fd.st_size;
}
} else {
return 4;
}
return 0;
}
#ifdef __APPLE__
int pv_watchfd_info(pvstate_t state, pvwatchfd_t info, int automatic)
{
struct vnode_fdinfowithpath vnodeInfo = { };
if (NULL == state)
return -1;
if (NULL == info)
return -1;
if (kill(info->watch_pid, 0) != 0) {
if (!automatic)
pv_error(state, "%s %u: %s",
_("pid"),
info->watch_pid, strerror(errno));
return 1;
}
int32_t proc_fd = (int32_t) info->watch_fd;
int size = proc_pidfdinfo(info->watch_pid, proc_fd,
PROC_PIDFDVNODEPATHINFO, &vnodeInfo,
PROC_PIDFDVNODEPATHINFO_SIZE);
if (size != PROC_PIDFDVNODEPATHINFO_SIZE) {
pv_error(state, "%s %u: %s %d: %s",
_("pid"),
info->watch_pid,
_("fd"), info->watch_fd, strerror(errno));
return 3;
}
strlcpy(info->file_fdpath, vnodeInfo.pvip.vip_path,
sizeof(info->file_fdpath));
info->size = 0;
if (!(0 == stat64(info->file_fdpath, &(info->sb_fd)))) {
if (!automatic)
pv_error(state, "%s %u: %s %d: %s: %s",
_("pid"),
info->watch_pid,
_("fd"),
info->watch_fd, info->file_fdpath,
strerror(errno));
return 3;
}
if (filesize(info) != 0) {
if (!automatic)
pv_error(state, "%s %u: %s %d: %s: %s",
_("pid"),
info->watch_pid,
_("fd"),
info->watch_fd,
info->file_fdpath,
_("not a regular file or block device"));
return 4;
}
return 0;
}
#else
/*
* Fill in the given information structure with the file paths and stat
@@ -91,25 +185,8 @@ int pv_watchfd_info(pvstate_t state, pvwatchfd_t info, int automatic)
info->size = 0;
if (S_ISBLK(info->sb_fd.st_mode)) {
int fd;
/*
* Get the size of block devices by opening
* them and seeking to the end.
*/
fd = open64(info->file_fdpath, O_RDONLY);
if (fd >= 0) {
info->size = lseek64(fd, 0, SEEK_END);
close(fd);
} else {
info->size = 0;
}
} else if (S_ISREG(info->sb_fd.st_mode)) {
if ((info->sb_fd_link.st_mode & S_IWUSR) == 0) {
info->size = info->sb_fd.st_size;
}
} else {
int ret = filesize(info);
if (ret != 0) {
if (!automatic)
pv_error(state, "%s %u: %s %d: %s: %s",
_("pid"),
@@ -118,13 +195,19 @@ int pv_watchfd_info(pvstate_t state, pvwatchfd_t info, int automatic)
info->watch_fd,
info->file_fdpath,
_("not a regular file or block device"));
return 4;
return ret;
}
return 0;
}
#endif
#ifdef __APPLE__
int pv_watchfd_changed(pvwatchfd_t info)
{
return 1;
}
#else
/*
* Return nonzero if the given file descriptor has changed in some way since
* we started looking at it (i.e. changed destination or permissions).
@@ -147,8 +230,28 @@ int pv_watchfd_changed(pvwatchfd_t info)
return 0;
}
#endif
#ifdef __APPLE__
long long pv_watchfd_position(pvwatchfd_t info)
{
long long position;
struct vnode_fdinfowithpath vnodeInfo = { };
int32_t proc_fd = (int32_t) info->watch_fd;
int size = proc_pidfdinfo(info->watch_pid, proc_fd,
PROC_PIDFDVNODEPATHINFO, &vnodeInfo,
PROC_PIDFDVNODEPATHINFO_SIZE);
if (size != PROC_PIDFDVNODEPATHINFO_SIZE) {
return -1;
}
position = (long long) vnodeInfo.pfi.fi_offset;
return position;
}
#else
/*
* Return the current file position of the given file descriptor, or -1 if
* the fd has closed or has changed in some way.
@@ -170,8 +273,35 @@ long long pv_watchfd_position(pvwatchfd_t info)
return position;
}
#endif
#ifdef __APPLE__
int pidfds(pvstate_t state, unsigned int pid, struct proc_fdinfo **fds,
int *count)
{
int size_needed = proc_pidinfo(pid, PROC_PIDLISTFDS, 0, 0, 0);
if (size_needed == -1) {
pv_error(state, "%s: unable to list pid fds: %s", _("pid"),
strerror(errno));
return -1;
}
*count = size_needed / PROC_PIDLISTFD_SIZE;
*fds = (struct proc_fdinfo *) malloc(size_needed);
if (*fds == NULL) {
pv_error(state, "%s: alloc failed: %s", _("pid"),
strerror(errno));
return -1;
}
proc_pidinfo(pid, PROC_PIDLISTFDS, 0, *fds, size_needed);
return 0;
}
#endif
/*
* Scan the given process and update the arrays with any new file
* descriptors.
@@ -185,8 +315,6 @@ int pv_watchpid_scanfds(pvstate_t state, pvstate_t pristine,
pvstate_t * state_array_ptr, int *fd_to_idx)
{
char fd_dir[512] = { 0, };
DIR *dptr;
struct dirent *d;
int array_length = 0;
struct pvwatchfd_s *info_array = NULL;
struct pvstate_s *state_array = NULL;
@@ -196,24 +324,47 @@ int pv_watchpid_scanfds(pvstate_t state, pvstate_t pristine,
#else
sprintf(fd_dir, "/proc/%u/fd", watch_pid);
#endif
#ifdef __APPLE__
struct proc_fdinfo *fd_infos = NULL;
int fd_infos_count = 0;
if (pidfds(state, watch_pid, &fd_infos, &fd_infos_count) != 0) {
pv_error(state, "%s: pidfds failed", _("pid"));
return -1;
}
#else
DIR *dptr;
struct dirent *d;
dptr = opendir(fd_dir);
if (NULL == dptr)
return 1;
#endif
array_length = *array_length_ptr;
info_array = *info_array_ptr;
state_array = *state_array_ptr;
#ifdef __APPLE__
if (fd_infos_count < 1) {
pv_error(state, "%s: no fds found", _("pid"));
return -1;
}
for (int i = 0; i < fd_infos_count; i++) {
#else
while ((d = readdir(dptr)) != NULL) {
#endif
int fd, check_idx, use_idx, rc;
long long position_now;
fd = -1;
#ifdef __APPLE__
fd = fd_infos[i].proc_fd;
#else
if (sscanf(d->d_name, "%d", &fd) != 1)
continue;
if ((fd < 0) || (fd >= FD_SETSIZE))
continue;
#endif
/*
* Skip if this fd is already known to us.
*/
@@ -296,6 +447,11 @@ int pv_watchpid_scanfds(pvstate_t state, pvstate_t pristine,
info_array[use_idx].watch_pid = watch_pid;
info_array[use_idx].watch_fd = fd;
#ifdef __APPLE__
if (fd_infos[i].proc_fdtype != PROX_FDTYPE_VNODE) {
continue;
}
#endif
rc = pv_watchfd_info(state, &(info_array[use_idx]), 1);
/*
@@ -354,7 +510,12 @@ int pv_watchpid_scanfds(pvstate_t state, pvstate_t pristine,
}
}
#ifdef __APPLE__
free(fd_infos);
#else
closedir(dptr);
#endif
return 0;
}
@@ -363,14 +524,26 @@ int pv_watchpid_scanfds(pvstate_t state, pvstate_t pristine,
/*
* Set the display name for the given watched file descriptor, truncating at
* the relevant places according to the current screen width.
*
* If the file descriptor is pointing to a file under the current working
* directory, show its relative path, not the full path.
*/
void pv_watchpid_setname(pvstate_t state, pvwatchfd_t info)
{
int path_length, max_display_length;
int path_length, cwd_length, max_display_length;
char *file_fdpath = info->file_fdpath;
memset(info->display_name, 0, sizeof(info->display_name));
path_length = strlen(info->file_fdpath);
cwd_length = strlen(state->cwd);
if (cwd_length > 0 && path_length > cwd_length) {
if (0 ==
strncmp(info->file_fdpath, state->cwd, cwd_length)) {
file_fdpath += cwd_length + 1;
path_length -= cwd_length + 1;
}
}
max_display_length = (state->width / 2) - 6;
if (max_display_length >= path_length) {
@@ -380,7 +553,7 @@ void pv_watchpid_setname(pvstate_t state, pvwatchfd_t info)
#else
sprintf(info->display_name,
#endif
"%4d:%.498s", info->watch_fd, info->file_fdpath);
"%4d:%.498s", info->watch_fd, file_fdpath);
} else {
int prefix_length, suffix_length;
@@ -394,9 +567,9 @@ void pv_watchpid_setname(pvstate_t state, pvwatchfd_t info)
sprintf(info->display_name,
#endif
"%4d:%.*s...%.*s",
info->watch_fd, prefix_length, info->file_fdpath,
info->watch_fd, prefix_length, file_fdpath,
suffix_length,
info->file_fdpath + path_length - suffix_length);
file_fdpath + path_length - suffix_length);
}
debug("%s: %d: [%s]", "set name for fd", info->watch_fd,