Merge remote-tracking branch 'origin/master'
authorMike O'Connor <stew@debian.org>
Fri, 3 Jun 2011 12:20:13 +0000 (08:20 -0400)
committerMike O'Connor <stew@debian.org>
Fri, 3 Jun 2011 12:20:13 +0000 (08:20 -0400)
* origin/master:
  move to bin, get rid of vcsh

1  2 
bin/movein

diff --cc bin/movein
index 0000000,a6a7bc4..8583032
mode 000000,100755..100755
--- /dev/null
@@@ -1,0 -1,254 +1,255 @@@
+ #!/bin/sh
+ #
+ # Copyright © 2008 Mike O'Connor <stew@vireo.org>
+ #
+ # This program is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU General Public License as published by the
+ # Free Software Foundation; either version 2, or (at your option) any
+ # later version.
+ # 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ # 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ # USA.  
++
+ set -e
+ usage() {
+     bn=$(basename $0)
+     cat <<EOF
+ $0: manage home directory using mr
+ NAME
+   $bn - a command to manage detached git repositories using mr
+ SYNOPSIS
+   $bn command [options]
+   $bn init
+   $bn ls
+   $bn list
+   $bn add repository_name
+   $bn new repository_name file1 [file2 file3...]
+   $bn login repository_name
+ COMMANDS
+   init 
+       create ~/.mrconfig
+   ls
+   list
+       show a list of repositories
+   add repository_name
+       checkout the repository from the remote host and add it to
+       mr's configuration
+   new repository_name file1 [file2 file3...]  
+       create a new repository on the remote host, and checkin the
+       listed files to the new repository.   Add the new repository
+       to mr's configuration
+   login repository_name
+       start a subshell in repository_name
+ EOF
+     exit 1
+ }
+ GIT_HOST=git.vireo.org
+ REMOTE_REPOS=~/git
+ LOCAL_REPOS=~/.movein
+ MRCONFIG=~/.mrconfig
+ MOVEINRC=~/.moveinrc
+ [ -e "$MOVEINRC" ] && . "$MOVEINRC"
+ init() {
+     if [ $# -ne 0 ]; then 
+       usage
+     fi
+     
+     if [ -e $MRCONFIG ]; then
+       echo $MRCONFIG already exists
+       exit 1
+     fi
+     
+     if [ -e $MOVEINRC ]; then
+       echo $MOVEINRC already exists
+       exit 1
+     fi
+     echo -n "git server hostname? [git.vireo.org] " 
+     read GIT_HOST
+     if [ -z "$GIT_HOST" ]; then 
+       GIT_HOST=git.vireo.org
+     fi
+     echo -n "path to remote repositories? [~/git] " 
+     read REMOTE_REPOS
+     if [ -z "$REMOTE_REPOS" ]; then 
+       REMOTE_REPOS=~/git
+     fi
+     echo -n "Local repository directory? [~/.movein] " 
+     read LOCAL_REPOS
+     if [ -z "$LOCAL_REPOS" ]; then 
+       LOCAL_REPOS=~/.movein
+     fi
+     echo -n "Location of .mrconfig file? [~/.mrconfig] " 
+     read MRCONFIG
+     if [ -z "$MRCONFIG" ]; then 
+       MRCONFIG=~/.mrconfig
+     fi
+     cat <<EOF > $MOVEINRC
+ GIT_HOST=$GIT_HOST
+ REMOTE_REPOS=$REMOTE_REPOS
+ LOCAL_REPOS=$LOCAL_REPOS
+ MRCONFIG=$MRCONFIG
+ EOF
+     if [ ! -d "$LOCAL_REPOS" ]; then 
+       mkdir -p "$LOCAL_REPOS"
+     fi
+     cat <<END > $MRCONFIG
+ [DEFAULT]
+ include = cat /usr/share/mr/git-fake-bare
+ END
+     
+ }
+ login() {
+     if [ $# -ne 1 ]; then 
+       usage
+     fi
+     export GIT_DIR="$LOCAL_REPOS/${1}.git"
+     export GIT_WORK_TREE="$GIT_DIR/$(git config --get core.worktree)"
+     $SHELL -i || :
+ }
+ add() {
+     if [ $# -ne 1 ]; then 
+       usage
+     fi
+     REPO_NAME=$1.git ; shift
+     LOCAL_REPO=$LOCAL_REPOS/$REPO_NAME
+     REPO_URL=ssh://$GIT_HOST/$REMOTE_REPOS/$REPO_NAME
+     if [ -e "$LOCAL_REPO" ]; then
+       echo $LOCAL_REPO already exists
+       exit 1
+     else
+       trap "rm -rf $LOCAL_REPO" 0
+       mkdir "$LOCAL_REPO"
+       export GIT_DIR="$LOCAL_REPO"
+       git init --bare
+       git remote add origin $REPO_URL
+       git config branch.master.remote origin
+       git config branch.master.merge refs/heads/master
+       git config core.worktree ../../
+       git config core.bare false
+       GIT_WORK_TREE="$PWD" git pull
+       trap - 0
+       cat <<END >> $MRCONFIG
+ [$LOCAL_REPO]
+ checkout = git_fake_bare_checkout '$REPO_URL' '$REPO_NAME' '../../'
+ END
+     fi
+ }
+ list() {
+     find "${LOCAL_REPOS}" -mindepth 1 -maxdepth 1 -type d | sed 's,^.*/\([^/]*\).git$,\1,'
+ }
+ new() {
+     if [ $# -lt 2 ]; then 
+       usage
+     fi
+     REPO_NAME=$1.git ; shift
+     LOCAL_REPO="$LOCAL_REPOS/$REPO_NAME"
+     REPO_URL="ssh://$GIT_HOST/$REMOTE_REPOS/$REPO_NAME"
+     if [ ! -e "$1" ]; then
+       echo $1 not found
+       exit 1
+     fi
+     if [ -e "$LOCAL_REPO" ]; then
+       echo $LOCAL_REPO already exists
+       exit 1
+     else
+       trap "rm -rf $LOCAL_REPO" 0
+       mkdir -p "$LOCAL_REPO"
+       ssh $GIT_HOST "
+                GIT_DIR=$REMOTE_REPOS/$REPO_NAME git --bare init
+         " </dev/null
+       export GIT_DIR="$LOCAL_REPO"
+       git init --bare
+       git remote add origin $REPO_URL
+       git config branch.master.remote origin
+       git config branch.master.merge refs/heads/master
+       git config core.worktree ../../
+       git config core.bare false
+ #     for file in  ; do 
+       export GIT_WORK_TREE="$PWD"
+           git add "$@"
+ #     done
+       git commit -m "initial checkin"
+       git push --all
+       
+       trap - 0
+       cat <<END >> $MRCONFIG
+ [$LOCAL_REPO]
+ checkout = git_fake_bare_checkout '$REPO_URL' '$REPO_NAME' '../../'
+ END
+     fi
+ }
+ command=$1 ; shift
+ case "$command" in 
+     init)
+       init $@
+       ;;
+     add)
+         add $@
+       ;;
+     new)
+         new $@
+       ;;
+     login)
+         login $@
+       ;;
+     ls)
+         list
+       ;;
+     list)
+         list
+       ;;
+     *)
+       usage
+       exit 1
+       ;;
+ esac