The script can be used this way: git commit -sm "$(./scripts/modified_pages.sh): Short commit msg" And then maybe --ammend and add a longer message. This is especially useful for changes to many pages at once, usually when running a script to apply some global changes. Signed-off-by: Alejandro Colomar <alx.manpages@xxxxxxxxx> --- Now it will also include new files and deleted files. scripts/modified_pages.sh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100755 scripts/modified_pages.sh diff --git a/scripts/modified_pages.sh b/scripts/modified_pages.sh new file mode 100755 index 000000000..c6bc064a4 --- /dev/null +++ b/scripts/modified_pages.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +## Usage: +## git commit -m "$(./scripts/modified_pages.sh): Short message here" +## +## How it works: +## 1) Read git status. +## 2) Staged changes are always before "Changes not staged for commit". +## Cut from that point to not include pages not staged for commit. +## 3) Keep only lines containing "modified:" or "deleted:" or "new file:" +## (each of those is a changed file) +## 4) Keep only the path, replacing git text by ", ". +## 5) Keep only the basenames of the files in 'man?/'. +## 6) Remove any newline characters. +## 7) Remove the comma before the first file +## +## The result is a list of all files with changes staged for commit, +## separated by ", ". + + +git status \ +|sed "/Changes not staged for commit:/q" \ +|grep -E "^\s*(modified|deleted|new file):" \ +|sed "s/^.*:\s*/, /" \ +|sed "s%man[1-9]/%%" \ +|tr -d '\n' \ +|sed "s/^, //" -- 2.29.2