]> git.cworth.org Git - nogit/blobdiff - nogit
Add code for integrating nogit with emacs
[nogit] / nogit
diff --git a/nogit b/nogit
index b9a248e3f638ad9e2a203a1b8f77dd47601b4454..d55124d27d95ea92dcaa65d2475ab2f5c36f7e77 100755 (executable)
--- 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 previosu 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,7 +93,7 @@ nogit_clone()
         echo "" >&2
         echo "Cowardly refusing to clone" >&2
         cd ..
-        rm -rf $NOGIT_DIR-tmp
+        rm -rf $NOGIT_DIR_TMP
         false
     fi
 
@@ -95,7 +102,7 @@ nogit_clone()
     # 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"
@@ -103,7 +110,17 @@ nogit_clone()
 
 nogit_sync()
 {
-    echo "Internal error: 'nogit sync' not yet implemented"
+    # First commit any locally modified nogit files
+    GIT_DIR=$NOGIT_DIR git commit -a -m "nogit-sync commit" >/dev/null 2>&1 || true
+
+    # Then, fetch and merge any upstream changes
+    GIT_DIR=$NOGIT_DIR git fetch >/dev/null 2>&1
+    GIT_DIR=$NOGIT_DIR git merge -m "nogit-sync merge" >/dev/null 2>&1
+
+    # Finally, push any new commits up to the upstream repository
+    GIT_DIR=$NOGIT_DIR git push >/dev/null 2>&1
+
+    echo "Completed nogit sync"
 }
 
 if [ $# -lt 1 ]; then
@@ -122,14 +139,14 @@ case "$cmd" in
             false;
         fi
         nogit_clone "$2"
-    ;;
+       ;;
     sync)
         nogit_sync
-    ;;
+       ;;
     help)
         usage
         true
-    ;;
+       ;;
     *)
         echo "Error: Unknown command: $cmd" >&2
         echo ""