feat(user/mw_create_subpage_navlinks.sh):Handle deep subpage paths
[BK-2020-03.git] / user / git-bk-find-file
old mode 100644 (file)
new mode 100755 (executable)
index c31b31c..b1feb0d
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 # Desc: Grep search filenames of all git committed work trees
 #!/usr/bin/env bash
 # Desc: Grep search filenames of all git committed work trees
-# Usage: git-bk-find-file [string regex]
-# Example git-bk-find-file '*.txt'
+# Usage: git-bk-find-file [string grep pattern]
+# Example git-bk-find-file '.txt$'
 # Ref/Attrib: albfan "How can I search Git branches for a file or directory?" https://stackoverflow.com/a/16868704/10850071
 # Ref/Attrib: albfan "How can I search Git branches for a file or directory?" https://stackoverflow.com/a/16868704/10850071
-# Version: 0.0.1
+# Version: 0.2.0
 # Depends: GNU bash v5.1.16, GNU parallel 20210822
 
 yell() { echo "$0: $*" >&2; } # print script path and all args to stderr
 # Depends: GNU bash v5.1.16, GNU parallel 20210822
 
 yell() { echo "$0: $*" >&2; } # print script path and all args to stderr
@@ -24,16 +24,24 @@ display_commit() {
     # Input: arg1: commit id
     #        args2+: passed to grep
     # Output: stdout
     # Input: arg1: commit id
     #        args2+: passed to grep
     # Output: stdout
+    # Depends: git 2.34.1
     local commit results;
     
     commit="$1"; shift;
 
     # Decide if need to show commit at all
     if results="$(git ls-tree -r --name-only "$commit" | grep "$1")"; then
     local commit results;
     
     commit="$1"; shift;
 
     # Decide if need to show commit at all
     if results="$(git ls-tree -r --name-only "$commit" | grep "$1")"; then
-        commit="${commit:(-8)}"; # get last 8 chars
-        # Prepend results with commit
-        results="$( echo "$results" | sed "s/^/$commit: /" )";
-        printf "%s\n" "$results";
+        # Get commit timestamp
+        time="$(git -c log.showSignature=false show -s --format=%cI "$commit")";
+
+        # Get first 8 chars of commit
+        short_commit="${commit:0:8}";
+
+        # Output results
+        while read -r line; do
+            if [[ -z "$line" ]]; then continue; fi; # skip blank lines
+            printf "%s %s %s\n" "$time" "$short_commit" "$line";
+        done < <(printf "%s\n" "$results");
     fi;
     
     return 0;
     fi;
     
     return 0;