merge from joerg
authorMike O'Connor <stew@vireo.org>
Wed, 12 Oct 2011 02:25:01 +0000 (22:25 -0400)
committerMike O'Connor <stew@vireo.org>
Wed, 12 Oct 2011 02:25:01 +0000 (22:25 -0400)
Signed-off-by: Mike O'Connor <stew@vireo.org>
1  2 
movein

diff --cc movein
--- 1/movein
--- 2/movein
+++ b/movein
@@@ -6,8 -6,8 +6,8 @@@
  # 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,
+ #
 -# This program is distributed in the hope that it will be useful,
++# 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.  
+ # USA.
  
 -
  set -e
+ set -u
  
  usage() {
      bn=$(basename $0)
@@@ -39,11 -38,10 +39,11 @@@ SYNOPSI
    $bn add repository_name
    $bn new repository_name file1 [file2 file3...]
    $bn login repository_name
 +  $bn exec repository_name command [arg1 arg2...]
  
  COMMANDS
-   init 
+   init
 -      create ~/.mrconfig
 +      create ~/.moveinrc, create/update  ~/.mrconfig
  
    ls
    list
@@@ -75,9 -64,8 +75,9 @@@ EO
      exit 1
  }
  
 +[ $# -ge 1 ] || usage
  
- GIT_HOST=git.vireo.org
+ GIT_HOST=git.$(hostname -d)
  REMOTE_REPOS=~/git
  LOCAL_REPOS=~/.movein
  MRCONFIG=~/.mrconfig
@@@ -87,37 -75,42 +87,37 @@@ MOVEINRC=~/.moveinr
  
  init() {
  
-     if [ $# -ne 0 ]; then 
-       usage
+     if [ $# -ne 0 ]; then
 -          usage
 -    fi
 -
 -    if [ -e $MRCONFIG ]; then
 -          echo $MRCONFIG already exists
 -          exit 1
++            usage
      fi
-     
      if [ -e $MOVEINRC ]; then
-       echo $MOVEINRC already exists
-       exit 1
 -          echo $MOVEINRC already exists
 -          exit 1
++        echo $MOVEINRC already exists
++        exit 1
      fi
  
-     echo -n "git server hostname? [git.vireo.org] " 
+     echo -n "git server hostname? [${GIT_HOST}] "
      read GIT_HOST
-     if [ -z "$GIT_HOST" ]; then 
-       GIT_HOST=git.vireo.org
+     if [ -z "$GIT_HOST" ]; then
 -          GIT_HOST=git.$(hostname -d)
++        GIT_HOST=git.$(hostname -d)
      fi
  
-     echo -n "path to remote repositories? [~/git] " 
+     echo -n "path to remote repositories? [~/git] "
      read REMOTE_REPOS
-     if [ -z "$REMOTE_REPOS" ]; then 
-       REMOTE_REPOS=~/git
+     if [ -z "$REMOTE_REPOS" ]; then
 -          REMOTE_REPOS=~/git
++        REMOTE_REPOS=~/git
      fi
  
-     echo -n "Local repository directory? [~/.movein] " 
+     echo -n "Local repository directory? [~/.movein] "
      read LOCAL_REPOS
-     if [ -z "$LOCAL_REPOS" ]; then 
-       LOCAL_REPOS=~/.movein
+     if [ -z "$LOCAL_REPOS" ]; then
 -          LOCAL_REPOS=~/.movein
++        LOCAL_REPOS=~/.movein
      fi
  
-     echo -n "Location of .mrconfig file? [~/.mrconfig] " 
+     echo -n "Location of .mrconfig file? [~/.mrconfig] "
      read MRCONFIG
-     if [ -z "$MRCONFIG" ]; then 
-       MRCONFIG=~/.mrconfig
+     if [ -z "$MRCONFIG" ]; then
 -          MRCONFIG=~/.mrconfig
++        MRCONFIG=~/.mrconfig
      fi
  
      cat <<EOF > $MOVEINRC
@@@ -127,155 -120,161 +127,180 @@@ LOCAL_REPOS=$LOCAL_REPO
  MRCONFIG=$MRCONFIG
  EOF
  
-     if [ ! -d "$LOCAL_REPOS" ]; then 
-       mkdir -p "$LOCAL_REPOS"
+     if [ ! -d "$LOCAL_REPOS" ]; then
 -          mkdir -p "$LOCAL_REPOS"
++       mkdir -p "$LOCAL_REPOS"
      fi
  
 -    cat <<END > $MRCONFIG
 -[DEFAULT]
 -include = cat /usr/share/mr/git-fake-bare
 -END
 -
 +    mr -c "$MRCONFIG" config DEFAULT include="cat /usr/share/mr/git-fake-bare"
-     
  }
  
  login() {
-     if [ $# -ne 1 ]; then 
-       usage
+     if [ $# -ne 1 ]; then
 -          usage
++       usage
      fi
  
      export GIT_DIR="$LOCAL_REPOS/${1}.git"
      export GIT_WORK_TREE="$GIT_DIR/$(git config --get core.worktree)"
  
 -    $SHELL -i || :
 +    GIT_PS1_SHOWUNTRACKEDFILES= PSMOVEIN="movein:${1}" $SHELL -i || :
 +}
 +
 +execin() {
 +    local REPO
 +    if [ $# -lt 1 ]; then
-       usage
++       usage
 +    fi
 +
 +    REPO=$1;shift
 +
 +    export GIT_DIR="$LOCAL_REPOS/${REPO}.git"
 +    export GIT_WORK_TREE="$GIT_DIR/$(git config --get core.worktree)"
 +
 +    "$@"
  }
  
  add() {
-     if [ $# -ne 1 ]; then 
-       usage
+     if [ $# -ne 1 ]; then
 -          usage
++       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
 -          echo $LOCAL_REPO already exists
 -          exit 1
++            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.bare false
-       git config core.worktree ../../
-       git config status.showUntrackedFiles no
-       GIT_WORK_TREE="$LOCAL_REPO/../../" git pull
-       trap - 0
 -          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
--
-       mr -c "$MRCONFIG" config "$LOCAL_REPO" checkout="git_fake_bare_checkout '$REPO_URL' 'REPO_NAME' '../../'"
 -[$LOCAL_REPO]
 -checkout = git_fake_bare_checkout '$REPO_URL' '$REPO_NAME' '../../'
 -END
++        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.bare false
++        git config core.worktree ../../
++        git config status.showUntrackedFiles no
++        GIT_WORK_TREE="$LOCAL_REPO/../../" git pull
++        trap - 0
++
++        mr -c "$MRCONFIG" config "$LOCAL_REPO" checkout="git_fake_bare_checkout '$REPO_URL' 'REPO_NAME' '../../'"
      fi
 -
  }
  
  list() {
      find "${LOCAL_REPOS}" -mindepth 1 -maxdepth 1 -type d | sed 's,^.*/\([^/]*\).git$,\1,'
  }
  
 +listremote() {
 +    ssh $GIT_HOST "
 +        find '${REMOTE_REPOS}' -mindepth 1 -maxdepth 1 -type d | sed 's,^.*/\([^/]*\).git$,\1,'
 +    " </dev/null
 +}
 +
  new() {
-     if [ $# -lt 2 ]; then 
-       usage
+     if [ $# -lt 2 ]; then
 -          usage
++            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
 -          echo $1 not found
 -          exit 1
++            echo $1 not found
++            exit 1
      fi
  
      if [ -e "$LOCAL_REPO" ]; then
-       echo $LOCAL_REPO already exists
-       exit 1
 -          echo $LOCAL_REPO already exists
 -          exit 1
++            echo $LOCAL_REPO already exists
++            exit 1
      else
-       trap "rm -rf $LOCAL_REPO" 0
-       mkdir -p "$LOCAL_REPO"
 -          trap "rm -rf $LOCAL_REPO" 0
 -          mkdir -p "$LOCAL_REPO"
++            trap "rm -rf $LOCAL_REPO" 0
++            mkdir -p "$LOCAL_REPO"
  
-       ssh $GIT_HOST "
 -          ssh $GIT_HOST "
++            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.bare false
-       git config core.worktree ../../
-       git config status.showUntrackedFiles no
-       export GIT_WORK_TREE="$LOCAL_REPO/../../"
-       git add "$@"
-       git commit -m "initial checkin"
-       git push --all
-       
-       trap - 0
 -          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
--
-       mr -c "$MRCONFIG" config "$LOCAL_REPO" checkout="git_fake_bare_checkout '$REPO_URL' 'REPO_NAME' '../../'"
 -          trap - 0
 -          cat <<END >> $MRCONFIG
 -
 -[$LOCAL_REPO]
 -checkout = git_fake_bare_checkout '$REPO_URL' '$REPO_NAME' '../../'
 -END
++        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.bare false
++        git config core.worktree ../../
++        git config status.showUntrackedFiles no
++        export GIT_WORK_TREE="$LOCAL_REPO/../../"
++        git add "$@"
++        git commit -m "initial checkin"
++        git push --all
++
++        trap - 0
++
++        mr -c "$MRCONFIG" config "$LOCAL_REPO" checkout="git_fake_bare_checkout '$REPO_URL' 'REPO_NAME' '../../'"
      fi
  
  }
  
+ preflight() {
+     # Check a few requirements before doing any work
+     errors=0
+     set +e
+     for binary in mr git; do
+         bin=$(which ${binary})
+         if [ -z "${bin}" ]; then
+             echo "Missing required program: ${binary}"
+             errors=$(( errors + 1 ))
+         fi
+     done
+     set -e
+     if [ $errors -ne 0 ]; then
+         echo "Errors found, exiting"
+         exit 2
+     fi
+ }
+ if [ $# -lt 1 ]; then
+     usage
+     exit 1
+ fi
  
  command=$1 ; shift
- case "$command" in 
+ case "$command" in
      init)
-       init $@
-       ;;
 -          init $@
 -          ;;
++       preflight
++       init $@
++       ;;
      add)
-       add $@
-       ;;
 -        preflight
 -        add $@
 -          ;;
++       preflight
++       add $@
++       ;;
      new)
-       new $@
-       ;;
 -        preflight
 -        new $@
 -          ;;
++       preflight
++       new $@
++       ;;
      login)
-       login $@
-       ;;
 -        login $@
 -          ;;
++       login $@
++       ;;
 +    exec)
-       execin "$@"
-       ;;
++       execin "$@"
++       ;;
      ls)
-       list
-       ;;
 -        list
 -          ;;
++       list
++       ;;
      list)
-       list
-       ;;
 -        list
 -          ;;
++       list
++       ;;
 +    ls-r)
-       listremote
-       ;;
++       listremote
++       ;;
 +    list-remote)
-       listremote
-       ;;
++       listremote
++       ;;
  
      *)
-       usage
-       exit 1
-       ;;
 -          usage
 -          exit 1
 -          ;;
++       usage
++       exit 1
++       ;;
  esac