feat(up/bkt-read_stdin_psarg):add bash func to read stdin and posarg
[BK-2020-03.git] / unitproc / bktemp-initGitRepo
index 7a532faaa976144d263bf2eb4d01e407f8300421..10cfe4025606d9cc6663bccea95d63d574ec77db 100644 (file)
@@ -1,6 +1,8 @@
 #!/bin/bash
 # Desc: Initializes a git repository
 
 #!/bin/bash
 # Desc: Initializes a git repository
 
+#==BEGIN Define script parameters==
+#===BEGIN Declare local script functions===
 yell() { echo "$0: $*" >&2; }      #o Yell, Die, Try Three-Fingered Claw technique
 die() { yell "$*"; exit 111; }     #o Ref/Attrib: https://stackoverflow.com/a/25515370
 try() { "$@" || die "cannot $*"; } #o
 yell() { echo "$0: $*" >&2; }      #o Yell, Die, Try Three-Fingered Claw technique
 die() { yell "$*"; exit 111; }     #o Ref/Attrib: https://stackoverflow.com/a/25515370
 try() { "$@" || die "cannot $*"; } #o
@@ -29,11 +31,15 @@ initGitRepo() {
     #        arg2: repoDir
     #        arg3: remoteName
     #        arg4: branchName
     #        arg2: repoDir
     #        arg3: remoteName
     #        arg4: branchName
-    # Version: 0.0.4
+    # Version: 0.0.9
     # Depends: checkURL() 0.0.2, yell(), Bash 5.0.3
     # Ref/Attrib: [1]: Test for space-less alphanuemric string. https://unix.stackexchange.com/a/416120
     #             [2]: Test for argument count. https://stackoverflow.com/q/18568706
     #             [3]: Test if dir is (in) git repository. https://stackoverflow.com/a/39518382
     # Depends: checkURL() 0.0.2, yell(), Bash 5.0.3
     # Ref/Attrib: [1]: Test for space-less alphanuemric string. https://unix.stackexchange.com/a/416120
     #             [2]: Test for argument count. https://stackoverflow.com/q/18568706
     #             [3]: Test if dir is (in) git repository. https://stackoverflow.com/a/39518382
+    # Note: Pulls use '--ff-only' option which requires an upstream branch be set.
+    #   This can be done by using:
+    #     $ git branch --set-upstream-to origin/master master
+    # 
     #==BEGIN Validate input arguments==
     arg1="$1";
     arg2="$2";
     #==BEGIN Validate input arguments==
     arg1="$1";
     arg2="$2";
@@ -43,6 +49,9 @@ initGitRepo() {
     if checkURL "$arg1"; then repoURL="$arg1";
     else yell "ERROR:Not a valid URL:$arg1"; return 1; fi;
 
     if checkURL "$arg1"; then repoURL="$arg1";
     else yell "ERROR:Not a valid URL:$arg1"; return 1; fi;
 
+    # Passthrough repoDir (it may not exist yet)
+    repoDir="$arg2";
+    
     # Validate remoteName
     if [[ "$arg3" =~ ^[[:alnum:]]+$ ]]; then remoteName="$arg3";
     else yell "ERROR:Not a valid remote name:$arg3"; return 1; fi;  # See [1].
     # Validate remoteName
     if [[ "$arg3" =~ ^[[:alnum:]]+$ ]]; then remoteName="$arg3";
     else yell "ERROR:Not a valid remote name:$arg3"; return 1; fi;  # See [1].
@@ -63,18 +72,22 @@ initGitRepo() {
     else
        yell "STATUS:Already a git repository:$repoDir";
        git status; git remote -v;
     else
        yell "STATUS:Already a git repository:$repoDir";
        git status; git remote -v;
-       yell "STATUS:Pausing 4 seconds..."; sleep 4;
     fi;
     yell "STATUS:Adding $repoURL as remote $remoteName";
     git remote add "$remoteName" "$repoURL";
     fi;
     yell "STATUS:Adding $repoURL as remote $remoteName";
     git remote add "$remoteName" "$repoURL";
+    git branch --set-upstream-to "$remoteName"/"$branchName" "$branchName";
     yell "STATUS:Pulling branch $branchName from remote $remoteName";
     yell "STATUS:Pulling branch $branchName from remote $remoteName";
-    git pull "$remoteName" "$branchName";
+    git pull --ff-only "$remoteName" "$branchName";
+    git fetch "$remoteName";
     unset repoURL repoDir remoteName branchName;
     popd || exit 1;
     #==END create and populate git repository==
     unset repoURL repoDir remoteName branchName;
     popd || exit 1;
     #==END create and populate git repository==
+    yell "================================";
 } # Init Git Repository
 } # Init Git Repository
+#===END Declare local script functions===
+#==END Define script parameters==
 
 
-#==BEGIN test code
+#==BEGIN sample code
 tmpDir=/tmp/"$(date +%Y%m%dT%H%M%S%z)";
 mkdir -p "$tmpDir";
 pushd "$tmpDir" || exit 1;
 tmpDir=/tmp/"$(date +%Y%m%dT%H%M%S%z)";
 mkdir -p "$tmpDir";
 pushd "$tmpDir" || exit 1;
@@ -87,4 +100,7 @@ initGitRepo "$repoURL" "$repoDir" "$remoteName" "$branchName";
 unset repoURL repoDir remoteName branchName;
 
 yell "STATUS:Done.";
 unset repoURL repoDir remoteName branchName;
 
 yell "STATUS:Done.";
-#==END test code
+#==END sample code
+
+# Author: Steven Baltaktei Sandoval
+# License: GPLv3+