| ... | ... |
@@ -105,3 +105,109 @@ esac |
| 105 | 105 |
user="${GIT_GITOLITE_USER:-"$USER"}"
|
| 106 | 106 |
host="${GIT_GITOLITE_HOST:-"git.$(dnsdomainname)"}"
|
| 107 | 107 |
remote="${GIT_GITOLITE_REMOTE:-"origin"}"
|
| 108 |
+ |
|
| 109 |
+## ssh |
|
| 110 |
+ssh() |
|
| 111 |
+{
|
|
| 112 |
+ command ssh -T "git@$host" "$@" |
|
| 113 |
+} |
|
| 114 |
+ |
|
| 115 |
+## Repository-independent commands |
|
| 116 |
+case "$command" in |
|
| 117 |
+ 'info'|'help') ssh "$command" "$@"; exit; ;; |
|
| 118 |
+esac |
|
| 119 |
+ |
|
| 120 |
+## Helpers |
|
| 121 |
+toplevel="$(git rev-parse --show-toplevel)" |
|
| 122 |
+project="$(basename "$toplevel")" |
|
| 123 |
+repo="$user/$project" |
|
| 124 |
+url="https://$host/$repo" |
|
| 125 |
+remote_url="$(git remote get-url "$remote" 2> /dev/null || true)" |
|
| 126 |
+remote_repo="$(printf '%s\n' "$remote_url" | sed 's#^\(.\+://\)\?[^/]\+/##')" |
|
| 127 |
+head="$(git rev-parse --abbrev-ref HEAD 2> /dev/null || true)" |
|
| 128 |
+licenses='https://github.com/github/choosealicense.com/raw/gh-pages/_licenses' |
|
| 129 |
+ |
|
| 130 |
+remote() |
|
| 131 |
+{
|
|
| 132 |
+ git remote remove "$remote" 2> /dev/null || true |
|
| 133 |
+ git remote add "$remote" "$url" |
|
| 134 |
+} |
|
| 135 |
+ |
|
| 136 |
+commit() |
|
| 137 |
+{
|
|
| 138 |
+ message="$1"; shift; |
|
| 139 |
+ file="$1"; shift; |
|
| 140 |
+ printf '%s\n' "$@" >> "$file" |
|
| 141 |
+ eval "$(git var GIT_EDITOR)" '"$file"' |
|
| 142 |
+ git add "$file" |
|
| 143 |
+ git commit -m "$message" |
|
| 144 |
+} |
|
| 145 |
+ |
|
| 146 |
+fmt() |
|
| 147 |
+{
|
|
| 148 |
+ printf '%s\n' "$@" \ |
|
| 149 |
+ | command fmt --width=79 --goal=79 |
|
| 150 |
+} |
|
| 151 |
+ |
|
| 152 |
+## Repository initialization commands |
|
| 153 |
+[ "$remote_url" = "" ] || [ "$remote_url" = "$url" ] || \ |
|
| 154 |
+ warning "remote '$remote_url' does not match '$url'" |
|
| 155 |
+case "$command" in |
|
| 156 |
+ 'init') |
|
| 157 |
+ # Readme. |
|
| 158 |
+ commit 'Add readme' "$toplevel/README.md" \ |
|
| 159 |
+ "# [\`$project\`][]" \ |
|
| 160 |
+ '' \ |
|
| 161 |
+ ${description:+"$description"} \
|
|
| 162 |
+ ${description:+""} \
|
|
| 163 |
+ "[\`$project\`]: $url" \ |
|
| 164 |
+ ${references:+"$references"}
|
|
| 165 |
+ # License. |
|
| 166 |
+ license_raw="$(curl -sL "$licenses/$license.txt")" |
|
| 167 |
+ license_title="$( |
|
| 168 |
+ printf '%s' "$license_raw" \ |
|
| 169 |
+ | awk -F': ' '/^title:/{print $2; exit; }'
|
|
| 170 |
+ )" |
|
| 171 |
+ license_body="$( |
|
| 172 |
+ printf '%s' "$license_raw" \ |
|
| 173 |
+ | awk 's>=2&&!/^$/{b++};b;/^---$/{s++}' \
|
|
| 174 |
+ | sed \ |
|
| 175 |
+ -e 's/\[year\]/'"$(date +%Y)"'/' \ |
|
| 176 |
+ -e 's/\[fullname\]/'"$(git config user.name)"'/' \ |
|
| 177 |
+ )" |
|
| 178 |
+ printf '%s\n' "$license_body" >| "$toplevel/LICENSE" |
|
| 179 |
+ git add "$toplevel/LICENSE" |
|
| 180 |
+ commit 'Add license' "$toplevel/README.md" \ |
|
| 181 |
+ '' \ |
|
| 182 |
+ '## License' \ |
|
| 183 |
+ '' \ |
|
| 184 |
+ "$(fmt \ |
|
| 185 |
+ "Licensed under the [$license_title][] unless otherwise noted, see" \ |
|
| 186 |
+ 'the [`LICENSE`][] file.' \ |
|
| 187 |
+ )" \ |
|
| 188 |
+ '' \ |
|
| 189 |
+ "[$license_title]: https://choosealicense.com/licenses/$license" \ |
|
| 190 |
+ '[`LICENSE`]: LICENSE' |
|
| 191 |
+ # Remote. |
|
| 192 |
+ remote |
|
| 193 |
+ ssh create "$repo" |
|
| 194 |
+ git push |
|
| 195 |
+ exit |
|
| 196 |
+ ;; |
|
| 197 |
+ 'remote') |
|
| 198 |
+ remote |
|
| 199 |
+ exit |
|
| 200 |
+ ;; |
|
| 201 |
+esac |
|
| 202 |
+ |
|
| 203 |
+## Repository-dependent commands |
|
| 204 |
+[ "$remote_repo" ] || \ |
|
| 205 |
+ error "remote repo for '$remote' is not defined (run 'git-gitolite init'?)" |
|
| 206 |
+case "$command" in |
|
| 207 |
+ 'head') ssh symbolic-ref "$remote_repo" HEAD "refs/heads/$head"; ;; |
|
| 208 |
+ 'publish') ssh perms "$remote_repo" + READERS 'gitweb'; ;; |
|
| 209 |
+ 'unpublish') ssh perms "$remote_repo" - READERS 'gitweb'; ;; |
|
| 210 |
+ 'rm') ssh D unlock "$remote_repo"; |
|
| 211 |
+ ssh D rm "$remote_repo"; ;; |
|
| 212 |
+ *) ssh "$command" "$remote_repo" "$@"; ;; |
|
| 213 |
+esac |