From 2df30c27ead445724d066fc7df301be4d22f3c44 Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Fri, 8 Oct 2021 19:45:21 +0200 Subject: add git nopack to exp --- exp/Makefile | 15 +++++++++------ exp/exp.sh | 29 +++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 6 deletions(-) (limited to 'exp') diff --git a/exp/Makefile b/exp/Makefile index 8fb4ce0..4df2bb6 100644 --- a/exp/Makefile +++ b/exp/Makefile @@ -11,13 +11,15 @@ export COMMITS ?= commits export DNA_4K ?= dna_4k export DNA_8K ?= dna_8k export DIFFS ?= diffs +NOPACK ?= nopack +export GIT_NOPACK ?= $(abspath $(NOPACK)) export REPO_PATH ?= repo -GIT_PATH := git +export GIT_PATH ?= $(abspath git) GITC := git -C $(REPO_PATH) DNADIRS := $(DNA_4K) $(DNA_8K) -DATADIRS := $(DNA_4K) $(DNA_8K) $(DIFFS) +DATADIRS := $(DNA_4K) $(DNA_8K) $(DIFFS) $(NOPACK) SIZEFILES := $(DATADIRS:%=%.size) .PHONY: all exp @@ -39,7 +41,7 @@ summary.csv: $(SIZEFILES) echo $(DATADIRS) | tr ' ' ',' > $@ paste -d "," $^ >> $@ -$(DNADIRS:%=%.size): %.size: %.versions +$(DNADIRS:%=%.size) $(NOPACK).size: %.size: %.versions run rm -rf $@ for i in $> $@; \ @@ -62,12 +64,12 @@ $(DNADIRS:%=%.size): %.size: %.versions | sort -k2 \ > $@ -run: $(COMMITS) $(DNA_BACKUP) | $(DATADIRS) +run: $(COMMITS) $(DNA_BACKUP) | $(DATADIRS) $(NOPACK).versions rm -rf $(DATADIRS:%=%/*) ./exp.sh touch $@ -$(DATADIRS): +$(DATADIRS) $(NOPACK).versions: mkdir $@ $(DNA_BACKUP): .FORCE @@ -89,7 +91,8 @@ clean: mostlyclean rm -f $(COMMITS) mostlyclean: resultsclean - rm -rf $(DATADIRS) $(DNADIRS:%=%.versions) run + rm -rf $(DATADIRS) $(DATADIRS:%=%.versions) + rm -f run $(DATADIRS:%=%.results) resultsclean: rm -f summary.csv $(SIZEFILES) diff --git a/exp/exp.sh b/exp/exp.sh index 8a7af40..d5cc4dd 100755 --- a/exp/exp.sh +++ b/exp/exp.sh @@ -3,19 +3,32 @@ # This script expects the following variables to be exported: # - DNA_BACKUP: the path to dna-backup binary # - REPO_PATH: the path of the repo the experiment is based on +# - GIT_PATH: the path of the repo git-dir # - MAX_VERSION: the max number for versions for the experiment # - COMMITS: the name of the file that contains the lists of versions # - DNA_4K: the path fo the dna-backup dir with 4K chunksize # - DNA_8K: the path fo the dna-backup dir with 8K chunksize # - DIFFS: the path of the git diff dir +# - GIT_NOPACK: the path of the git nopack dir log() { echo -e "\033[90m$(date +%T.%3N)\033[0m" $* } +set-git-dir() { + echo gitdir: $1 > $REPO_PATH/.git +} + GITC="git -C $REPO_PATH" OUT=/tmp/dna-backup-exp-out +# Init git nopack dir +rm $REPO_PATH/.git +$GITC init --separate-git-dir=$GIT_NOPACK +$GITC --git-dir=$GIT_NOPACK config gc.auto 0 +set-git-dir $GIT_PATH +nopack_prev=0 + # "empty tree" commit prev="4b825dc642cb6eb9a060e54bf8d69288fbee4904" last=$(tail --lines=1 $COMMITS | cut -f1) @@ -38,6 +51,22 @@ do | gzip \ > $diff + # Create git nopack for this version + log "create git nopack for this version" + set-git-dir $GIT_NOPACK + $GITC add . + $GITC commit -m $hash &> $OUT \ + || (log "error commiting to nopack"; cat $OUT; exit 1) + ls $GIT_NOPACK/objects/pack + find $GIT_NOPACK -type f -exec du -ba {} + \ + | grep -v /logs/ \ + | cut -f1 \ + | paste -sd+ \ + | xargs -i echo {} - $nopack_prev \ + | bc \ + > $(printf "%s.versions/%05d" $GIT_NOPACK $i) + set-git-dir $GIT_PATH + # Create 4k dna backup for this version log "create 4k dna backup for this version" $DNA_BACKUP commit -v 2 -c 4096 $REPO_PATH $DNA_4K -- cgit v1.2.3