path: root/tar-tree.c
AgeCommit message (Collapse)Author
2006-04-04Use blob_, commit_, tag_, and tree_type throughout.Peter Eriksen
This replaces occurences of "blob", "commit", "tag", and "tree", where they're really used as type specifiers, which we already have defined global constants for. Signed-off-by: Peter Eriksen <> Signed-off-by: Junio C Hamano <>
2006-04-02Remove useless pointer updateRene Scharfe
buf is not used afterwards. The compiler optimized the dead store out anyway, but let's clean the source, too. Signed-off-by: Rene Scharfe <> Signed-off-by: Junio C Hamano <>
2006-03-30tree/diff header cleanup.Junio C Hamano
Introduce tree-walk.[ch] and move "struct tree_desc" and associated functions from various places. Rename DIFF_FILE_CANON_MODE(mode) macro to canon_mode(mode) and move it to cache.h. This macro returns the canonicalized st_mode value in the host byte order for files, symlinks and directories -- to be compared with a tree_desc entry. create_ce_mode(mode) in cache.h is similar but is intended to be used for index entries (so it does not work for directories) and returns the value in the network byte order. Signed-off-by: Junio C Hamano <>
2006-03-26Merge branch 'rs/tar-tree' into nextJunio C Hamano
* rs/tar-tree: tar-tree: Use the prefix field of a tar header tar-tree: Remove obsolete code tar-tree: Use write_entry() to write the archive contents tar-tree: Introduce write_entry() tar-tree: Use SHA1 of root tree for the basedir git-apply: safety fixes Removed bogus "<snap>" identifier. Clarify and expand some hook documentation. commit-tree: check return value from write_sha1_file() send-email: Identify author at the top when sending e-mail Format tweaks for asciidoc.
2006-03-26tar-tree: Use the prefix field of a tar headerRene Scharfe
... to store parts of the path, if possible. This allows us to avoid writing extended headers in certain cases (long pathes can only be split at '/' chars). Also adds a file to the test repo with a 100 chars long directory name. Even old versions of tar that don't understand POSIX extended headers should be able to handle this testcase. Btw.: The longest path in the kernel tree currently has 70 chars. Together with a 30 chars long prefix this would already cross the field limit of 100 chars. Signed-off-by: Rene Scharfe <> Signed-off-by: Junio C Hamano <>
2006-03-26tar-tree: Remove obsolete codeRene Scharfe
Signed-off-by: Rene Scharfe <> Signed-off-by: Junio C Hamano <>
2006-03-26tar-tree: Use write_entry() to write the archive contentsRene Scharfe
Signed-off-by: Rene Scharfe <> Signed-off-by: Junio C Hamano <>
2006-03-26tar-tree: Introduce write_entry()Rene Scharfe
... and use it initially to write global extended header records. Improvements compared to the old write_header(): - Uses a struct ustar_header instead of hardcoded offsets. - Takes one struct strbuf as path argument instead of a (basedir, prefix, name) tuple. - Not only writes the tar header, but also the contents of the file, if any. - Does not write directly into the ring buffer. This allows the code to be layed out more naturally, because there is no more ordering constraint. Before we had to first finish writing the extended header, now we can construct the extended and normal headers in parallel. - The typeflag parameter has been replaced by (reasonable) magic values. path == NULL indicates an extended header, additionally sha1 == NULL means it is a global extended header. Signed-off-by: Rene Scharfe <> Signed-off-by: Junio C Hamano <>
2006-03-26tar-tree: Use SHA1 of root tree for the basedirRene Scharfe
... instead of the made-up "0". Signed-off-by: Rene Scharfe <> Signed-off-by: Junio C Hamano <>
2006-03-24sha1_name: warning ambiguous refs.Junio C Hamano
This makes sure that many commands that take refs on the command line to honor core.warnambiguousrefs configuration. Earlier, the commands affected by this patch did not read the configuration file. Signed-off-by: Junio C Hamano <>
2006-03-04tar-tree: file/dirmode fix.Junio C Hamano
This fixes two bugs introduced when we switched to generic tree traversal code. (1) directory mode recorded silently became 0755, not 0777 (2) if passed a tree object (not a commit), it emitted an alarming error message (but proceeded anyway). Signed-off-by: Junio C Hamano <>
2006-02-01Make git-tar-tree use the tree_desc abstractionsLinus Torvalds
Signed-off-by: Linus Torvalds <> Signed-off-by: Junio C Hamano <>
2006-01-31Use struct commit in tar-treeDaniel Barkalow
It was open-coding getting the commit date from a commit. Signed-off-by: Daniel Barkalow <barkalow@iabervon> Signed-off-by: Junio C Hamano <>
2006-01-31Use struct tree in tar-treeDaniel Barkalow
It was using an open-coded tree parser; use a struct tree instead. Signed-off-by: Daniel Barkalow <> Signed-off-by: Junio C Hamano <>
2006-01-07tar-tree: finish honoring extractor's umask in git-tar-tree.Junio C Hamano
Earlier commit 38ec15a973a1f075f0d94d130b0ef279562921cd forgot to apply the same principle of not forcing go-w to the base directory when specified. Signed-off-by: Junio C Hamano <>
2005-12-20xread/xwrite: do not worry about EINTR at calling sites.Junio C Hamano
We had errno==EINTR check after read(2)/write(2) sprinkled all over the places, always doing continue. Consolidate them into xread()/xwrite() wrapper routines. Credits for suggestion goes to HPA -- bugs are mine. Signed-off-by: Junio C Hamano <>
2005-11-29Make the rest of commands work from a subdirectory.Junio C Hamano
These commands are converted to run from a subdirectory. commit-tree convert-objects merge-base merge-index mktag pack-objects pack-redundant prune-packed read-tree tar-tree unpack-file unpack-objects update-server-info write-tree Signed-off-by: Junio C Hamano <>
2005-10-02Honor extractor's umask in git-tar-tree.Junio C Hamano
The archive generated with git-tar-tree had 0755 and 0644 mode bits. This inconvenienced the extractor with umask 002 by robbing g+w bit unconditionally. Just write it out with loose permissions bits and let the umask of the extractor do its job. Signed-off-by: Junio C Hamano <>
2005-08-10[PATCH] -Werror fixesTimo Sirainen
GCC's format __attribute__ is good for checking errors, especially with -Wformat=2 parameter. This fixes most of the reported problems against 2005-08-09 snapshot.
2005-07-30[PATCH] Unify usage strings declarationPetr Baudis
All usage strings are now declared as static const char []. This is carried over from my old git-pb branch. Signed-off-by: Petr Baudis <> Signed-off-by: Junio C Hamano <>
2005-06-21[PATCH] Fix several gcc4 signedness warningsMika Kukkonen
Here is a patch that fixes several gcc4 warnings about different signedness, all between char and unsigned char. I tried to keep the patch minimal so resertod to casts in three places. Signed-off-by: Mika Kukkonen <> Signed-off-by: Linus Torvalds <>
2005-06-03[PATCH] git-tar-tree: fix write_trailerRene Scharfe
write_trailer() writes the last 10k (a full block) of the tar archive. write_if_needed() writes out a block *if* it is full and then sets the offset to 0. In nine out of ten cases the messed up write_trailer() function didn't manage to fill the block thus not writing anything at all, truncating the archive. I was "lucky" to hit the other case and so my testing ran OK. Signed-off-by: Rene Scharfe <> Signed-off-by: Linus Torvalds <>
2005-06-03[PATCH] git-tar-tree: cleanup write_trailer()Rene Scharfe
replace open-coded variants of get_record(). Signed-off-by: Rene Scharfe <> Signed-off-by: Linus Torvalds <>
2005-05-20sparse cleanupLinus Torvalds
Fix various things that sparse complains about: - use NULL instead of 0 - make sure we declare everything properly, or mark it static - use proper function declarations ("fn(void)" instead of "fn()") Sparse is always right.
2005-05-19[PATCH] cleanup of in-code namesAlexey Nezhdanov
Fixes all in-code names that leaved during "big name change". Signed-off-by: Alexey Nezhdanov <> Signed-off-by: Linus Torvalds <>
2005-05-18[PATCH] Kill a bunch of pointer sign warnings for gcc4Brian Gerst
- Raw hashes should be unsigned char. - String functions want signed char. - Hash and compress functions want unsigned char. Signed-off By: Brian Gerst <> Signed-off-by: Linus Torvalds <>
2005-05-09Add copyright notice of Rene Scharfe to tar-tree.cPetr Baudis
2005-05-07[PATCH] Lift path length limits from git-tar-tree.Rene Scharfe
Signed-off-by: Rene Scharfe <> Signed-off-by: Linus Torvalds <>
2005-05-07[PATCH] Do not initialize sha1_file_directory by hand.Junio C Hamano
Some commands initialize sha1_file_directory by hand. There is no need to do so; sha1_file.c knows how to handle it. The next patch will remove the variable altogether. Signed-off-by: Junio C Hamano <> Signed-off-by: Linus Torvalds <>
2005-05-06[PATCH] git-tar-tree: add symlink supportRene Scharfe
Add symlink support to git-tar-tree.
2005-05-06[PATCH] git-tar-tree: make file contents accessible to write_header()Rene Scharfe
Pass pointer to filecontents to write_header() and pass pointer to filecontents, its size and some flags to write_exntended_header(). These parameters are not used, yet. They are added in preparation to symlink support.
2005-05-06[PATCH] git-tar-tree: add extended header helpersRene Scharfe
Introduce append_extended_header_prefix(), extended_header_len() and append_extended_header(). These are helper functions that make it easier to handle multiple entries in a pax extended header. append_log() is no longer needed and can go away.
2005-05-06[PATCH] git-tar-tree: add TYPEFLAG_ constantsRene Scharfe
Add TYPEFLAG_ constants.
2005-05-06[PATCH] git-tar-tree: add get_record()Rene Scharfe
Add get_record() which returns a pointer to the next record in the block.
2005-05-01Add "get_sha1()" helper function.Linus Torvalds
This allows the programs to use various simplified versions of the SHA1 names, eg just say "HEAD" for the SHA1 pointed to by the .git/HEAD file etc. For example, this commit has been done with git-commit-tree $(git-write-tree) -p HEAD instead of the traditional "$(cat .git/HEAD)" syntax.
2005-04-30[PATCH] GIT: Create tar archives of tree on the flyRene Scharfe
Write commit ID to global extended pax header at the beginning of the tar file, if possible. get-tar-commit-id.c is an example program to get the ID back out of such a tar archive. Signed-off-by: Rene Scharfe <> Signed-off-by: Linus Torvalds <>
2005-04-29[PATCH] Use read_object_with_reference() in tar-treeRene Scharfe
This patch replaces the usage of read_tree_with_tree_or_commit_sha1() with read_object_with_reference() in tar-tree. As a result the code that tries to figure out the commit time doesn't need to open the commit object 'by hand' any more. Signed-off-by: Rene Scharfe <> Signed-off-by: Linus Torvalds <>
2005-04-28[PATCH] create tar archives of tree on the flyRene Scharfe
This is an improved version of tar-tree, a streaming archive creator for GIT. The major added feature is blocking; all write(2) calls now have a size of 10240, just as GNU tar (and tape drives) likes them. The buffering overhead does not seem to degrade performance because most files in the repositories I tested this with are smaller than 10KB, so we need fewer system calls. File names are still restricted to 500 bytes and the archive format currently only allows for files up to 8GB. Both restrictions can be lifted if need be with more pax extended headers. The archive format used is the pax interchange format, i.e. POSIX tar format. It can be read by (and created with) GNU tar. If I read the specs correctly tar-tree should now be standards compliant (modulo bugs). Because it streams the archive (think ls-tree merged with cat-file), tar-tree doesn't need to create any temporary files. That makes it quite fast. It accepts tree IDs and commit IDs as first parameter. In the latter case tar-tree tries to get the commit date out of the committer line. Else all files in the archive are time-stamped with the current time. An optional second parameter is used as a path prefix for all files in the archive. Example: $ tar-tree a2755a80f40e5794ddc20e00f781af9d6320fafb \ linux-2.6.12-rc3 | bzip9 -9 > linux-2.6.12-rc3.tar.bz2 Signed-off-by: Rene Scharfe <> Signed-off-by: Linus Torvalds <>