summaryrefslogtreecommitdiff
path: root/git-fetch-script
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-05-22 18:03:24 (GMT)
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-05-22 18:03:24 (GMT)
commit7ef76925d9c19ef74874e1735e2436e56d0c4897 (patch)
tree0f31a7ea7b6e6b37e7e25d1fdb843172ef246b84 /git-fetch-script
parent6b14d7faf0bad026a81a27bac07b47691f621b8f (diff)
downloadgit-7ef76925d9c19ef74874e1735e2436e56d0c4897.zip
git-7ef76925d9c19ef74874e1735e2436e56d0c4897.tar.gz
git-7ef76925d9c19ef74874e1735e2436e56d0c4897.tar.bz2
Split up git-pull-script into separate "fetch" and "merge" phases.
This allows you to just fetch stuff first, inspect it, and then resolve the merge separately if everything looks good.
Diffstat (limited to 'git-fetch-script')
-rwxr-xr-xgit-fetch-script41
1 files changed, 41 insertions, 0 deletions
diff --git a/git-fetch-script b/git-fetch-script
new file mode 100755
index 0000000..17f22af
--- /dev/null
+++ b/git-fetch-script
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+merge_repo=$1
+merge_name=${2:-HEAD}
+
+: ${GIT_DIR=.git}
+: ${GIT_OBJECT_DIRECTORY="${SHA1_FILE_DIRECTORY-"$GIT_DIR/objects"}"}
+
+download_one () {
+ # remote_path="$1" local_file="$2"
+ case "$1" in
+ http://*)
+ wget -q -O "$2" "$1" ;;
+ /*)
+ test -f "$1" && cat >"$2" "$1" ;;
+ *)
+ rsync -L "$1" "$2" ;;
+ esac
+}
+
+download_objects () {
+ # remote_repo="$1" head_sha1="$2"
+ case "$1" in
+ http://*)
+ git-http-pull -a "$2" "$1/"
+ ;;
+ /*)
+ git-local-pull -l -a "$2" "$1/"
+ ;;
+ *)
+ rsync -avz --ignore-existing \
+ "$1/objects/." "$GIT_OBJECT_DIRECTORY"/.
+ ;;
+ esac
+}
+
+echo "Getting remote $merge_name"
+download_one "$merge_repo/$merge_name" "$GIT_DIR"/MERGE_HEAD
+
+echo "Getting object database"
+download_objects "$merge_repo" "$(cat "$GIT_DIR"/MERGE_HEAD)"