Skip to content

Commit c26286a

Browse files
Add util scripts
Signed-off-by: Lukasz Gryglicki <[email protected]>
1 parent b55dee9 commit c26286a

3 files changed

Lines changed: 90 additions & 1 deletion

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ GO_TEST_ENV=PG_DB=dbtest GHA2DB_PROJECT=kubernetes GHA2DB_LOCAL=1
1111

1212
CRON_SCRIPTS=cron/cron_db_backup.sh cron/cron_db_backup_all.sh cron/refresh_mviews.sh cron/sysctl_config.sh cron/backup_artificial.sh cron/restart_dbs.sh cron/ensure_service_active.sh
1313
UTIL_SCRIPTS=devel/wait_for_command.sh devel/cronctl.sh devel/sync_lock.sh devel/sync_unlock.sh devel/db.sh devel/all_projs.sh devel/all_dbs.sh
14-
GIT_SCRIPTS=git/git_reset_pull.sh git/git_files.sh git/git_tags.sh git/last_tag.sh git/git_loc.sh
14+
GIT_SCRIPTS=git/git_reset_pull.sh git/git_files.sh git/git_tags.sh git/last_tag.sh git/git_loc.sh git/git_commits.sh git/git_commits_range.sh
1515

1616
ifdef GHA2DB_DATADIR
1717
DATADIR=${GHA2DB_DATADIR}

git/git_commits.sh

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
# Usage:
5+
# git_commits.sh <repo_path> <sha1> [sha2 ... shaN]
6+
#
7+
# Output (one record per commit):
8+
# sha,b64(author_name),b64(author_email),b64(committer_name),b64(committer_email),b64(message);
9+
#
10+
# Fields separated by ','; records separated by ';'.
11+
12+
if [ $# -lt 2 ]; then
13+
exit 0
14+
fi
15+
16+
REPO="$1"
17+
shift
18+
19+
if [ -z "${REPO}" ]; then
20+
echo "missing repo path" >&2
21+
exit 2
22+
fi
23+
if [ ! -d "${REPO}/.git" ]; then
24+
echo "repo path is not a git repo: ${REPO}" >&2
25+
exit 2
26+
fi
27+
if [ "$#" -lt 1 ]; then
28+
exit 0
29+
fi
30+
31+
b64() {
32+
if base64 -w 0 </dev/null >/dev/null 2>&1; then
33+
base64 -w 0
34+
else
35+
base64 | tr -d '\n'
36+
fi
37+
}
38+
39+
shas=("$@")
40+
git -C "${REPO}" log -z --no-walk --format='%H%x00%an%x00%ae%x00%cn%x00%ce%x00%B' "${shas[@]}" |
41+
while IFS= read -r -d '' SHA; do
42+
IFS= read -r -d '' AN || AN=""
43+
IFS= read -r -d '' AE || AE=""
44+
IFS= read -r -d '' CN || CN=""
45+
IFS= read -r -d '' CE || CE=""
46+
IFS= read -r -d '' MSG || MSG=""
47+
48+
printf "%s," "${SHA}"
49+
printf "%s," "$(printf "%s" "${AN}" | b64)"
50+
printf "%s," "$(printf "%s" "${AE}" | b64)"
51+
printf "%s," "$(printf "%s" "${CN}" | b64)"
52+
printf "%s," "$(printf "%s" "${CE}" | b64)"
53+
printf "%s;" "$(printf "%s" "${MSG}" | b64)"
54+
done
55+
56+
printf '\n'
57+

git/git_commits_range.sh

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
# Usage:
5+
# git_commits_range.sh <repo_path> <before_sha> <head_sha> <skip> <limit>
6+
#
7+
# Outputs:
8+
# One SHA per line (max <limit>), newest->oldest.
9+
#
10+
11+
if [ $# -lt 3 ]; then
12+
exit 0
13+
fi
14+
15+
REPO="$1"
16+
BEFOR="${2:-}"
17+
HEAD="${3:-}"
18+
SKIP="${4:-0}"
19+
LIMIT="${5:-1000}"
20+
21+
ZERO="0000000000000000000000000000000000000000"
22+
23+
if [ -z "${HEAD}" ] || [ "${HEAD}" = "${ZERO}" ]; then
24+
exit 0
25+
fi
26+
27+
if [ -z "${BEFOR}" ] || [ "${BEFOR}" = "${ZERO}" ]; then
28+
git -C "${REPO}" rev-list --max-count="${LIMIT}" --skip="${SKIP}" "${HEAD}"
29+
else
30+
git -C "${REPO}" rev-list --max-count="${LIMIT}" --skip="${SKIP}" "${BEFOR}..${HEAD}"
31+
fi
32+

0 commit comments

Comments
 (0)