aboutsummaryrefslogtreecommitdiff
path: root/exp
diff options
context:
space:
mode:
Diffstat (limited to 'exp')
-rw-r--r--exp/Makefile15
-rwxr-xr-xexp/exp.sh29
2 files changed, 38 insertions, 6 deletions
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 $</*; do \
cut -f1 $$i | paste -sd+ | bc >> $@; \
@@ -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