Since the cat() function in git.py is used only inside the server-cmd.py script, and since it is a discouraged use of CatPipe, inline the code inside the server-cmd.py script. At the same time, make the CatPipe object persistent between calls to the "cat" command to remove unnecessary deletion/creation or resources. Signed-off-by: Gabriel Filion <firstname.lastname@example.org>
Based on a question from the mailing list. Signed-off-by: Avery Pennarun <email@example.com>
After the recent change to let vfs seek around in files, we broke support for files that were only one chunk. Fix it up, then add some unit tests to detect such mistakes in the future. Also, 'bup ftp' now returns nonzero if it catches any exceptions during execution, making it more suitable for use in scripts... such as the unit tests :) Signed-off-by: Avery Pennarun <firstname.lastname@example.org>
Signed-off-by: Avery Pennarun <email@example.com>
Currently, the Makefile assumes the python command that should be used is the default python version -- the "python" executable that is found in PATH. Compiling and testing with a different python version is not possible without either having a system with another default version, or by manually changing the link found in PATH. Correct this situation by using a variable for the python command name, that can be overridden on the command line like the following: make PYTHON=python2.6 test Signed-off-by: Gabriel Filion <firstname.lastname@example.org>
Add docstrings to the module and the public classes and functions of the git library (eg. the ones that do not start with _ ). Also rename the AbortableIter class to _AbortableIter since it is used only inside the git.py library and is not intended to be used elsewhere for now. Signed-off-by: Gabriel Filion <email@example.com>
Just silently refuse to install the documentation instead. Reported by Karl Kiniger. Signed-off-by: Avery Pennarun <firstname.lastname@example.org>
This prevents output that doesn't have any newlines from being buffered forever (eg. the output of 'bup split -vv'). Reported by Karl Kiniger. Signed-off-by: Avery Pennarun <email@example.com>
…pts. Signed-off-by: Avery Pennarun <firstname.lastname@example.org>
This allows you to limit how much upstream bandwidth 'bup save' and 'bup split' will use. Specify it as a number of bytes/second, or with the 'k' or 'M' or (lucky you!) 'G' suffixes for larger values. Signed-off-by: Avery Pennarun <email@example.com>
Apparently some versions of readline (6.0, for me) in some versions of Python (Ubuntu's python2.6.4-0ubuntu1, for me) have an irritating bug where they add an extra space to the end of all completions. This is particularly annoying for directory completions, as you can't tab-complete your way into the contents of the directory. See http://bugs.python.org/issue5833 This patch, borrowed mostly from Trac, goes in and twiddles the appropriate variable inside the readline library to make it stop doing that. See http://trac.edgewall.org/ticket/8711 for the discussion. Signed-off-by: Peter McCurdy <firstname.lastname@example.org>
Suggested by Joe Beda.
In split-cmd.py, the "w" variable is first seen on line 55 and is kept around until line 96. Variables that are sparsely used in a medium distance in the code should have a name that carries more sense when read on its own. Change "w" into "pack_writer" to better identify the purpose of the variable. Signed-off-by: Gabriel Filion <email@example.com>
As discussed earlier on the mailing list, the "len" builtin is used very often, and using "len" as a variable name can get confusing. Change all occurrences of "len" as a variable to "sz" to keep it short and meaningful. Signed-off-by: Gabriel Filion <firstname.lastname@example.org>
the whatis(1) tool cannot parse the bup manpages, because there are two words before the '-' separator. This patch joins the words using another '-', in the same fashion as git, to overcome this limitation. Before: $ whatis bup fuse bup (1) - Backup program using rolling checksums and git file fo... fuse: nothing appropriate. $ whatis bup-fuse bup-fuse: nothing appropriate. After: $ whatis bup-fuse bup-fuse (1) - mount a bup repository as a filesystem Signed-off-by: Jon Dowland <email@example.com>
Some pieces of text in the documentation files use the <...> syntax to mark named placeholders. However, the conversion done by pandoc from Markdown to makefile makes some of these placeholders disappear. The affected elements are those that contain only characters that could be valid for an e-mail address or a URL, but are not supposed to be one of both. Also, elements inside `...`-style code blocks are unaffected. Fix this situation by escaping the < and > characters where the tags disappear. Signed-off-by: Gabriel Filion <firstname.lastname@example.org>
Signed-off-by: Avery Pennarun <email@example.com>
When used with the Python "fuse" module not installed on the system, the bup-fuse command exits with an error. To avoid confusing (or frustrating?) users, print a friendlier error message that better describes what happens. Signed-off-by: Gabriel Filion <firstname.lastname@example.org>
Gabriel Filion pointed out that bup's version number (which we added to the man pages automatically) was not detected when you used a bup tarball generated from 'git archive' (or more likely, you let GitHub call 'git archive' for you). That makes sense, since our version detection was based on having a .git directory around, which the tarball doesn't. Instead, let's create a .gitattributes file and have it auto-substitute some version information during 'git archive'. Of course, if we actually *do* have a .git directory, continue to use that. While we're here, add a new 'bup version' command and alias "bup --version" and "bup -V" to call it, since those options are pretty standard.
If you have a huge file, you can now seek around inside it (eg. in 'bup fuse') without having to read its entire contents. Calculating the file size is also really fast now. This makes a bup fuse-mounted filesystem much more useful for real-time access. For example, I was able to connect to an sqlite3 database and have it work at a reasonable speed. (Obviously, since 'bup fuse' is written in python and doesn't currently support threading, the speed could still be improved, but at least it's no longer godawful.)
Notably, MemoryErrors thrown because the file we're trying to load into memory is too big to load all at once. Now the MemoryError gets thrown, but the main program is potentially able to recover from it because CatPipe at least doesn't get into an inconsistent state. Also we can recover nicely if some lamer kills our git-cat-file subprocess. The AutoFlushIter we were using for this purpose turns out to not have been good enough, and it's never been used anywhere but in CatPipe, so I've revised it further and renamed it to git.AbortableIter.
We use the columnate() function from main.py for this, now moved into helpers.py.
Previously we would print "Saving 'filename'" even if we were about to report that 'filename' doesn't exist or is the wrong file type.
…n-fuse. python-fuse 0.2-pre3-4ubuntu1 didn't work, now it does. python-fuse 0.2-pre3-9 on Debian did work, still does.
Files that are already named *.bup are renamed to *.bup.bupl, so that we can just always drop either .bup or .bupl from a filename if it's there, and the result will be the original filename. Also updated lib/bup/vfs.py to demangle the names appropriately, and treat git trees named *.bup as real chunked files (ie. by joining them back together).
The article itself was here: https://lwn.net/Articles/380983/