I'm not good at bash, and what I was trying to do is to get information from git log --name-status branch_one...branch_two and after that split output by commits, for example:
git_command_output="
commit one
Author: Johny
Date: 01/01/1999
feat: add something
M src/some_file.txt
commit two
Author: Alex
Date: 02/01/1999
fix: bug
M src/some_file.txt"
From the above I would want to create and array of strings, where each string will be information about one commit.
For instance array would look something like that:
echo "${array[0]}"
# Author: Johny
# Date: 01/01/1999
# feat: add something
# M src/my_file.txt
echo "${array[1]}"
# Author: Alex
# Date: 02/01/1999
# fix: bug
# M src/foreign_file.txt
What I tried (didn't work):
array[0]=$(echo "$git_command_output" | awk '{split($0, array, "commit"); print array[0]}')
IFS='commit' read -r -a array <<< "$git_command_output"
Is there a concise way to do it, prefferably using awk?
CodePudding user response:
You may use this readarray with awk:
IFS= readarray -d '' -t arr < <(awk -v RS='\nM [^\n] \n' '{ORS = RT "\0"} 1' file)
# check array content
declare -p arr
declare -a arr=([0]=$'commit one\nAuthor: Johny\nDate: 01/01/1999\n\nfeat: add something\n\nM src/some_file.txt\n' [1]=$'\ncommit two\nAuthor: Alex\nDate: 02/01/1999\n\nfix: bug\n\nM src/some_file.txt\n')
Here:
- We add
\0after each record using awk - Then use
-d ''to make sure to read\0delimited text in arrayarr
CodePudding user response:
You can filter the output of many git commands (such as log) to those that affect specific files, simply by adding the paths of these files at the end of the command. Try:
git log --name-status branch_one...branch_two -- src/my_file.txt
