forked from colobot/colobot
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Useful script for showing status of data submodule
- Loading branch information
Showing
1 changed file
with
90 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
#!/bin/bash | ||
|
||
# Tool for showing submodule history vs. associated and currently checked-out commits | ||
|
||
module="data" | ||
tail_count=5 | ||
|
||
branch_name="$(git symbolic-ref HEAD 2>/dev/null)" | ||
|
||
if [ -z "$branch_name" ]; then | ||
display_branch_name="(detached head)" | ||
else | ||
display_branch_name="$branch_name" | ||
fi | ||
|
||
module_branch_name="$(cd $module && git symbolic-ref HEAD 2>/dev/null)" | ||
module_working_commit="$(cd $module && git rev-parse HEAD)" | ||
module_assoc_commit="$(git ls-tree $branch_name $module | awk '{print $3}' -)" | ||
|
||
if [ -z "$module_branch_name" ]; then | ||
module_assoc_branches=($(cd $module && git branch --contains $module_assoc_commit | awk 'NR > 1 { print $1 }')) | ||
if [ ${#module_assoc_branches[@]} -ne 1 ]; then | ||
echo "$module module is in detached head, but referenced commit is in multiple branches" | ||
echo "Sorry, can't help you" | ||
exit 1 | ||
else | ||
module_branch_name="${module_assoc_branches[0]}" | ||
display_module_branch_name="(detached head, detected: $module_branch_name)" | ||
fi | ||
else | ||
display_module_branch_name="$module_branch_name" | ||
fi | ||
|
||
echo -e "Repository branch: \033[32m$display_branch_name\033[0m" | ||
echo -e "$module module branch: \033[32m$display_module_branch_name\033[0m" | ||
|
||
if [ -z "$(cd $module && git rev-list HEAD | grep $module_assoc_commit)" ]; then | ||
echo -e "$module module associated commit: \033[33m$module_assoc_commit\033[0m is not in module history!" | ||
echo "You probably have checked out different branch!" | ||
exit 1 | ||
fi | ||
|
||
echo "" | ||
|
||
i=0 | ||
c=0 | ||
h=1 | ||
(cd $module && git log --format='%H%x01%h%x01%s%x00' $module_branch_name) | while read -d $'\0' info; do | ||
commit=$(echo "$info" | cut -d$'\1' -f1) | ||
short_commit=$(echo "$info" | cut -d$'\1' -f2) | ||
message=$(echo "$info" | cut -d$'\1' -f3) | ||
|
||
if [ $h -eq 1 ]; then | ||
echo -n -e "\033[34m H \033[0m" | ||
else | ||
echo -n " " | ||
fi | ||
|
||
h=0 | ||
|
||
if [ "$commit" == "$module_working_commit" ]; then | ||
echo -n -e "\033[31m * \033[0m" | ||
c=$(($c+1)) | ||
else | ||
echo -n " " | ||
fi | ||
|
||
if [ "$commit" == "$module_assoc_commit" ]; then | ||
echo -n -e "\033[32m x \033[0m" | ||
c=$(($c+1)) | ||
else | ||
echo -n " " | ||
fi | ||
|
||
echo -e "\033[33m$short_commit\033[0m $message" | ||
|
||
if [ $c -eq 2 ]; then | ||
i=$(($i+1)) | ||
if [ $i -gt $tail_count ]; then | ||
echo " ..." | ||
break | ||
fi | ||
fi | ||
done | ||
|
||
echo "" | ||
echo -e "\033[34m H \033[0m -- $module_branch_name HEAD" | ||
echo -e "\033[31m * \033[0m -- checked-out commit" | ||
echo -e "\033[32m x \033[0m -- associated commit" | ||
|