731ab9ccf2
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 <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
107 lines
2.5 KiB
Makefile
107 lines
2.5 KiB
Makefile
# -DCOLLISION_CHECK if you believe that SHA1's
|
|
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
|
# enough guarantees about no collisions between objects ever hapenning.
|
|
#
|
|
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
|
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
|
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
|
# break unless your underlying filesystem supports those sub-second times
|
|
# (my ext3 doesn't).
|
|
CFLAGS=-g -O2 -Wall
|
|
|
|
CC=gcc
|
|
AR=ar
|
|
|
|
SCRIPTS=git-merge-one-file-script git-prune-script git-pull-script git-tag-script
|
|
|
|
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
|
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
|
check-files ls-tree merge-base merge-cache unpack-file git-export \
|
|
diff-cache convert-cache http-pull rpush rpull rev-list git-mktag \
|
|
diff-tree-helper tar-tree
|
|
|
|
all: $(PROG)
|
|
|
|
install: $(PROG) $(SCRIPTS)
|
|
install $(PROG) $(SCRIPTS) $(HOME)/bin/
|
|
|
|
LIB_OBJS=read-cache.o sha1_file.o usage.o object.o commit.o tree.o blob.o tag.o
|
|
LIB_FILE=libgit.a
|
|
LIB_H=cache.h object.h blob.h tree.h commit.h tag.h
|
|
|
|
LIB_H += strbuf.h
|
|
LIB_OBJS += strbuf.o
|
|
|
|
LIB_H += diff.h
|
|
LIB_OBJS += diff.o
|
|
|
|
LIBS = $(LIB_FILE)
|
|
LIBS += -lz
|
|
|
|
ifdef MOZILLA_SHA1
|
|
SHA1_HEADER="mozilla-sha1/sha1.h"
|
|
LIB_OBJS += mozilla-sha1/sha1.o
|
|
else
|
|
ifdef PPC_SHA1
|
|
SHA1_HEADER="ppc/sha1.h"
|
|
LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
|
|
else
|
|
SHA1_HEADER=<openssl/sha.h>
|
|
LIBS += -lssl
|
|
endif
|
|
endif
|
|
|
|
CFLAGS += '-DSHA1_HEADER=$(SHA1_HEADER)'
|
|
|
|
$(LIB_FILE): $(LIB_OBJS)
|
|
$(AR) rcs $@ $(LIB_OBJS)
|
|
|
|
init-db: init-db.o
|
|
|
|
%: %.c $(LIB_FILE)
|
|
$(CC) $(CFLAGS) -o $@ $(filter %.c,$^) $(LIBS)
|
|
|
|
rpush: rsh.c
|
|
|
|
rpull: rsh.c
|
|
|
|
http-pull: LIBS += -lcurl
|
|
|
|
blob.o: $(LIB_H)
|
|
cat-file.o: $(LIB_H)
|
|
check-files.o: $(LIB_H)
|
|
checkout-cache.o: $(LIB_H)
|
|
commit.o: $(LIB_H)
|
|
commit-tree.o: $(LIB_H)
|
|
convert-cache.o: $(LIB_H)
|
|
diff.o: $(LIB_H)
|
|
diff-cache.o: $(LIB_H)
|
|
diff-tree.o: $(LIB_H)
|
|
fsck-cache.o: $(LIB_H)
|
|
git-export.o: $(LIB_H)
|
|
init-db.o: $(LIB_H)
|
|
ls-tree.o: $(LIB_H)
|
|
merge-base.o: $(LIB_H)
|
|
merge-cache.o: $(LIB_H)
|
|
object.o: $(LIB_H)
|
|
read-cache.o: $(LIB_H)
|
|
read-tree.o: $(LIB_H)
|
|
rev-tree.o: $(LIB_H)
|
|
sha1_file.o: $(LIB_H)
|
|
show-diff.o: $(LIB_H)
|
|
show-files.o: $(LIB_H)
|
|
tree.o: $(LIB_H)
|
|
update-cache.o: $(LIB_H)
|
|
usage.o: $(LIB_H)
|
|
unpack-file.o: $(LIB_H)
|
|
write-tree.o: $(LIB_H)
|
|
http-pull.o: $(LIB_H)
|
|
rpull.o: $(LIB_H)
|
|
rpush.o: $(LIB_H)
|
|
|
|
clean:
|
|
rm -f *.o mozilla-sha1/*.o ppc/*.o $(PROG) $(LIB_FILE)
|
|
|
|
backup: clean
|
|
cd .. ; tar czvf dircache.tar.gz dir-cache
|