]> git.madduck.net Git - etc/mrsetup.git/blob - mrsetup

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

240dd9f70466702d622f348bbe4ab05301bbff43
[etc/mrsetup.git] / mrsetup
1 #!/bin/sh
2 #
3 # mrsetup - set up an account using mr
4 #
5 # Copyright © 2008 martin f. krafft <madduck@madduck.net>
6 # Released under the terms of the Artistic Licence 2.0
7 #
8 set -eu
9
10 MY_ACCOUNT="$(whoami)@$(hostname --fqdn)"
11 MY_ACCOUNT_GIT_REPO=${MY_GIT_REPOS}/accounts/${MY_ACCOUNT}.git
12 MY_GIT_URL_BASE=madduck:
13 MY_MR_REPO_URL=${MY_GIT_URL_BASE}pub/etc/mr.git
14 #MY_ACCOUNT_REPO_URL=$MY_GIT_URL_BASE/$MY_ACCOUNT_GIT_REPO
15 MR_REPO_URL=${MY_GIT_URL_BASE}pub/code/mr.git
16 MR_CODE=$HOME/code/mr
17 MR_FGIT=.fgits/mr.git
18 MR=.mr
19 BIN_DIR=.bin
20
21 if [ -z "${SSH_AUTH_SOCK:-}" ]; then
22   echo E: '$SSH_AUTH_SOCK' is not set. >&2
23   exit 1
24 fi
25
26 if [ ! -x "$(command -v git)" ]; then
27   echo E: git is not installed. >&2
28   exit 2
29 fi
30
31 cd $HOME
32
33 if [ -e .mrconfig ]; then
34   echo E: .mrconfig already exists. >&2
35   exit 3
36 fi
37
38 if [ -d "$MR_FGIT" ]; then
39   echo E: "$MR_FGIT" already exists. >&2
40   exit 4
41 fi
42
43 if [ -d ".git" ]; then
44   echo E: .git already exists. >&2
45   exit 5
46 fi
47
48 if [ -d code/mr ]; then
49   if [ -x code/mr/mr ]; then
50     echo W: code/mr already exists, let us hope for the best... >&2
51   else
52     echo E: code/mr already exists. >&2
53     exit 6
54   fi
55 else
56   echo I: cloning mr into ${MR_CODE}...
57   mkdir --parent ${MR_CODE%/*}
58   git clone --no-checkout $MR_REPO_URL $MR_CODE
59   (cd $MR_CODE && git checkout -b vcsh origin/vcsh)
60   mkdir --parent $BIN_DIR
61   ln -s ../${MR_CODE}/mr $BIN_DIR/mr
62   echo
63 fi
64
65 cat <<_eof > .mrconfig
66 [DEFAULT]
67 include = cat $MR_CODE/lib/*
68
69 [$MR_FGIT]
70 checkout = git_fake_bare_checkout $MY_MR_REPO_URL ${MR_FGIT##*/} ../../
71 _eof
72 echo I: initial .mrconfig:
73 cat .mrconfig
74 echo
75
76 echo I: cloning mr configuration...
77 $MR_CODE/mr co
78 echo
79
80 echo I: bootstrapping default .mrconfig...
81 cp $MR/templ/.mrconfig .
82
83 echo I: setting up base...
84 $MR_CODE/mr co
85
86 if ssh $MY_GIT_SERVER "test -d $MY_ACCOUNT_GIT_REPO" </dev/null; then
87   echo I: checking out local git repository...
88   dir="$(mktemp -d home.XXXXXXXX)"
89   trap "rm -rf $dir" 0
90   git clone --no-checkout $MY_ACCOUNT_REPO_URL "$dir"/co
91   mv "$dir"/co/.git .
92   git checkout-index --quiet --index --all
93   git reset HEAD
94   rm -r $dir
95   trap - 0
96   echo
97 else
98   echo I: creating remote git repository for this account...
99   ssh $MY_GIT_SERVER "
100     GIT_DIR=${MY_ACCOUNT_GIT_REPO} git --bare init
101     echo 'account setup for $MY_ACCOUNT'
102     " </dev/null
103   echo I: setting up local git repository...
104   git init
105   git remote add origin $MY_ACCOUNT_REPO_URL
106   git config branch.master.remote origin
107   git config branch.master.merge refs/heads/master
108   git add .mrconfig
109   git commit -m'initial checkin'
110   git push --all
111   echo
112 fi
113
114 echo I: spawning a shell...
115 $SHELL -i -l </dev/tty >/dev/tty
116
117 echo I: back from the shell.
118
119 exit 0