Skip to content

Commit c258e5d

Browse files
authored
Merge pull request #615 from techjacker/master
Adds 2FA support to git-fork
2 parents 2e8b368 + 2451c0c commit c258e5d

File tree

1 file changed

+17
-13
lines changed

1 file changed

+17
-13
lines changed

bin/git-fork

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
#!/usr/bin/env bash
22

33
abort() {
4-
echo $@
4+
echo "$@"
55
exit 1
66
}
77

88
url="$1"
9-
10-
test -z "$url" && url=`git remote get-url origin 2> /dev/null` && origin=true
11-
9+
test -z "$url" && url=$(git remote get-url origin 2> /dev/null) && origin=true
1210
# validate repo url
1311
test -z "$url" && abort "github repo needs to be specified as an argument"
1412

1513
# validate user
1614
echo "Enter your github username"
1715
read user
18-
[ "$user" = 'n' ] && abort "git username required"
16+
[ -n "$user" ] || abort "git username required"
17+
echo "Enter github two-factor authentication code (leave blank if not set up)"
18+
read MFA_CODE
1919

2020
# extract owner + project from repo url
2121
project=${url##*/}
@@ -31,28 +31,32 @@ fi
3131
[ -z "$project" -o -z "$owner" ] && abort "github repo needs to be specified as an argument"
3232

3333
# create fork
34-
curl -X POST -u "$user" "https://api.github.com/repos/$owner/$project/forks"
34+
curl -qs \
35+
-X POST \
36+
-u "$user" \
37+
-H "X-GitHub-OTP: $MFA_CODE" \
38+
"https://api.github.com/repos/$owner/$project/forks"
39+
3540
[ $? = 0 ] || abort "fork failed"
3641

42+
echo "Add GitHub remote branch via SSH (you will be prompted to verify the server's credentials)? (y/n)"
43+
read use_ssh
3744
# Check if user has ssh configured with GitHub
38-
ssh -o BatchMode=yes [email protected] exit >/dev/null 2>&1
39-
ssh_exit_code=$?
40-
if [[ "$ssh_exit_code" = 0 ]] || [[ "$ssh_exit_code" = 1 ]]; then
45+
if [ -n "$use_ssh" ] && ssh -T [email protected] 2>&1 | grep -qi 'success'; then
4146
remote_prefix="[email protected]:"
4247
else
4348
remote_prefix="https://github.com/"
4449
fi
4550

4651
if [ "$origin" = true ]; then
4752
git remote rename origin upstream
48-
git remote add origin "$remote_prefix$user/$project"
53+
git remote add origin "${remote_prefix}${user}/${project}.git"
4954
git fetch origin
5055
else
5156
# clone forked repo into current dir
52-
git clone "$remote_prefix$user/$project" "$project"
53-
57+
git clone "${remote_prefix}${user}/${project}.git" "$project"
5458
# add reference to origin fork so can merge in upstream changes
5559
cd "$project"
56-
git remote add upstream "$remote_prefix$owner/$project"
60+
git remote add upstream "${remote_prefix}${owner}/${project}.git"
5761
git fetch upstream
5862
fi

0 commit comments

Comments
 (0)