summaryrefslogtreecommitdiff
path: root/ghclone
blob: 0502739751886e3ec4e6523abe0e59806a30aeed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/env bash

set -e

usage () {
  printf "usage: $(basename $0) <owner>[/]<repo>\n" >&2
  exit 1
}

already_exists () {
  printf "%s\n" "$2"
  exit 2
}

root=${GITHUB_ROOT:-"$HOME/src"}
owner="$1"
repo="$2"

[ -z "$owner" ] && usage

if [ -z "$repo" ]; then
  IFS='/' read -ra parsed <<< "$owner"
  owner="${parsed[0]}"
  repo="${parsed[1]}"
  if [ -z "$owner" ] || [ -z "$repo" ]; then
    usage
  fi
fi

dest="$root/$owner"
dir="$dest/$repo"

[ -d "$dir" ] && already_exists "$owner/$repo" "$dir"

mkdir -p "$dest"
cd "$dest"
git clone "git@github.com:$owner/$repo"

git config \
    --file="$dir/.git/config" \
    --add remote.origin.fetch '+refs/pull/*/head:refs/pull/origin/*'

git config \
    --file="$dir/.git/config" \
    --add remote.origin.fetch '+refs/pull/*/merge:refs/merge/origin/*'

printf "%s\n" "$dest/$repo"