initial checkin
[gregoa/movein.git] / movein
1 #!/bin/sh
2 #
3 # Copyright © 2008 Mike O'Connor <stew@vireo.org>
4
5 set -e
6
7
8 usage() {
9     bn=$(basename $0)
10     cat <<EOF
11 $0: manage .mrconfig
12
13 NAME
14   $bn - a command to manage detached git repositories using mr
15
16 SYNOPSIS
17   $bn command [options]
18
19   $bn init
20   $bn add repository_name
21   $bn new repository_name file1 [file2 file3...]
22
23 COMMANDS
24   init 
25       create .mrconfig  
26
27   add repository_name
28       checkout the repository from the remote host and add it to
29       mr's configuration
30
31   new repository_name file1 [file2 file3...]  
32       create a new repository on the remote host, and checkin the
33       listed files to the new repository.   Add the new repository
34       to mr's configuration
35 EOF
36
37     exit 1
38 }
39
40
41 GIT_HOST=flounder.vireo.org
42 REMOTE_REPOS=~/git
43 LOCAL_REPOS=.fgits
44
45
46 init() {
47
48     if [ $# -ne 0 ]; then 
49         usage
50     fi
51     
52     if [ -e .mrconfig ]; then
53         echo .mrconfig already exists
54         exit 1
55     fi
56
57     mkdir $LOCAL_REPOS
58     cat <<END > .mrconfig
59 [DEFAULT]
60 include = cat /usr/share/mr/git-fake-bare
61 END
62 }
63
64
65 add() {
66     if [ $# -ne 1 ]; then 
67         usage
68     fi
69     REPO_NAME=$1.git ; shift
70     LOCAL_REPO=$LOCAL_REPOS/$REPO_NAME
71     REPO_URL=ssh://$GIT_HOST/$REMOTE_REPOS/$REPO_NAME
72
73     if [ -e "$LOCAL_REPO" ]; then
74         echo $LOCAL_REPO already exists
75         exit 1
76     else
77         trap "rm -rf $LOCAL_REPO" 0
78         mkdir "$LOCAL_REPO"
79         export GIT_DIR="$LOCAL_REPO"
80         git init --bare
81         git remote add origin $REPO_URL
82         git config branch.master.remote origin
83         git config branch.master.merge refs/heads/master
84         git config core.worktree ../../
85         git config core.bare false
86         GIT_WORK_TREE="$PWD" git pull
87         trap - 0
88         cat <<END >> .mrconfig
89
90 [$LOCAL_REPO]
91 checkout = git_fake_bare_checkout '$REPO_URL' '$REPO_NAME' '../../'
92 END
93     fi
94
95 }
96
97 new() {
98     if [ $# -lt 2 ]; then 
99         usage
100     fi
101     REPO_NAME=$1.git ; shift
102     LOCAL_REPO="$LOCAL_REPOS/$REPO_NAME"
103     REPO_URL="ssh://$GIT_HOST/$REMOTE_REPOS/$REPO_NAME"
104
105     if [ ! -e "$1" ]; then
106         echo $1 not found
107         exit 1
108     fi
109
110     if [ -e "$LOCAL_REPO" ]; then
111         echo $LOCAL_REPO already exists
112         exit 1
113     else
114         trap "rm -rf $LOCAL_REPO" 0
115         mkdir -p "$LOCAL_REPO"
116
117         ssh $GIT_HOST "
118                GIT_DIR=$REMOTE_REPOS/$REPO_NAME git --bare init
119         " </dev/null
120
121         export GIT_DIR="$LOCAL_REPO"
122         git init --bare
123         git remote add origin $REPO_URL
124         git config branch.master.remote origin
125         git config branch.master.merge refs/heads/master
126         git config core.worktree ../../
127         git config core.bare false
128 #       for file in  ; do 
129         export GIT_WORK_TREE="$PWD"
130             git add "$@"
131 #       done
132         git commit -m "initial checkin"
133         git push --all
134         
135         trap - 0
136         cat <<END >> .mrconfig
137
138 [$LOCAL_REPO]
139 checkout = git_fake_bare_checkout '$REPO_URL' '$REPO_NAME' '../../'
140 END
141     fi
142
143 }
144
145 command=$1 ; shift
146 case "$command" in 
147     init)
148         init $@
149         ;;
150     add)
151         add $@
152         ;;
153     new)
154         new $@
155         ;;
156 esac