X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=nogit;h=68420025c8dea9e6457e518c3b2b7bc4a01a93b4;hb=5834bcd7aebd13aa85167932053a535126de3fcb;hp=3b4c40c51a0bcdc85e2ce3e27f15ab5205f5a6e9;hpb=0d90c4ef1abc1382c85243bb59db435bdb5770e7;p=nogit diff --git a/nogit b/nogit index 3b4c40c..6842002 100755 --- a/nogit +++ b/nogit @@ -2,6 +2,7 @@ set -e NOGIT_DIR=.nogit +NOGIT_DIR_TMP=$NOGIT_DIR-tmp usage_brief() { @@ -58,13 +59,19 @@ nogit_clone() url="$1" if [ -e $NOGIT_DIR ]; then - echo "Error: .nogit already exists. Cowardly refusing to re-clone." + echo "Error: $NOGIT_DIR already exists. Cowardly refusing to re-clone." + return 1 + fi + + if [ -e $NOGIT_DIR_TMP ]; then + echo "Error: $NOGIT_DIR_TMP already exists. Was a previous clone interrupted?" + echo "You'll want to clean that up before trying again." return 1 fi # Clone the repository into a temporary directory - mkdir $NOGIT_DIR-tmp - cd $NOGIT_DIR-tmp + mkdir $NOGIT_DIR_TMP + cd $NOGIT_DIR_TMP git clone "$url" tmp >/dev/null 2>&1 # Sanity check that we won't be overwriting any files @@ -86,16 +93,22 @@ nogit_clone() echo "" >&2 echo "Cowardly refusing to clone" >&2 cd .. - rm -rf $NOGIT_DIR-tmp + rm -rf $NOGIT_DIR_TMP false fi + # Install the info/atttributes file that forces the "union" merge + # driver for all files, giving us the semantics of "keep both sides + # of all conflicts" that is at the heart of nogit. + mkdir -p tmp/.git/info + echo '* merge=union' > tmp/.git/info/attributes + # Now that we've passed the sanity check, install the cloned .git # object store into $NOGIT_DIR, cleanup our temporary files, and # checkout the (known to not be conflicting) files. mv tmp/.git ../$NOGIT_DIR cd .. - rm -rf $NOGIT_DIR-tmp + rm -rf $NOGIT_DIR_TMP GIT_DIR=$NOGIT_DIR git reset --hard >/dev/null 2>&1 echo "Completed nogit clone of $url"