set -e
NOGIT_DIR=.nogit
+NOGIT_DIR_TMP=$NOGIT_DIR-tmp
usage_brief()
{
echo " with an auto-generated commit message)"
echo ""
echo " * Push out any new commits generated locally"
+ echo ""
+ echo "nogit log"
+ echo ""
+ echo " Display a log of changes"
}
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
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
+
+ # Install the config entry for the pretty format for "nogit log"
+ (cd tmp; git config pretty.nogit "format:%Cblue%h %an (%ad)%Creset")
+
# 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"
echo "Completed nogit sync"
}
+nogit_log()
+{
+ GIT_DIR=$NOGIT_DIR git log -p --pretty=nogit
+}
+
if [ $# -lt 1 ]; then
echo "Error: missing command name." >&2
echo ""
false;
fi
nogit_clone "$2"
- ;;
+ ;;
sync)
nogit_sync
- ;;
+ ;;
+ log)
+ nogit_log
+ ;;
help)
usage
true
- ;;
+ ;;
*)
echo "Error: Unknown command: $cmd" >&2
echo ""