]> git.xonotic.org Git - xonotic/xonotic.git/blobdiff - misc/tools/git-import-pk3
import-pk3: use a separate index file
[xonotic/xonotic.git] / misc / tools / git-import-pk3
index 54c8593e48030a8bb0c40f73334bdd06596cc725..f9680ac7b36dfb8887aa2189da706872387bb4ae 100755 (executable)
@@ -66,23 +66,43 @@ message()
     echo -e "Import $pk3name\n" | cat - "$changes" 2> /dev/null
 }
 
+# Clean up on exit
+
+cleanup_index=
+cleanup_worktree=
+
+cleanup()
+{
+    [ "$cleanup_index" ] && rm -f "$GIT_INDEX_FILE"
+    [ "$cleanup_worktree" ] && find "$GIT_WORK_TREE" -mindepth 1 -delete
+}
+
+trap cleanup EXIT
+
+# Set up index file, makes testing easier
+[ -z "$GIT_INDEX_FILE" ] && {
+    export GIT_INDEX_FILE="$GIT_DIR/import-pk3-index"
+    cleanup_index=t
+}
+
 # Extract the PK3 (the -n suppresses prompting in an edge case)
-# FIXME: perhaps the caller should handle extraction and clean up
 unzip -n -qq "$pk3path" -d "$GIT_WORK_TREE" ||
 die "couldn't extract PK3 contents"
-trap 'find "$GIT_WORK_TREE" -mindepth 1 -delete' EXIT
+cleanup_worktree=t
 
-# Note the refs
+# Note the refs and the common ancestor
 master=refs/heads/master
 ref=refs/heads/$branch
+base=$(git merge-base $master $ref 2> /dev/null) ||
+base=$master
 
 # Figure out the parent commit
 parent=\
-$(git rev-parse --verify -q $ref || git rev-parse --verify -q $master) ||
+$(git rev-parse --verify -q $ref || git rev-parse --verify -q $base) ||
 die "couldn't determine parent commit"
 
-# Read the tree at master into index
-git read-tree $master ||
+# Read the tree at base into index
+git read-tree $base ||
 die "couldn't initialize index"
 
 # Reject any modified files, the mapper should create a branch instead