Added jiffydiffy
This commit is contained in:
Executable
+91
@@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if ! jj root >/dev/null; then
|
||||
echo >&2 "Failed to get repository root. Is this a jj repo?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -rd '' JIFFYDIFFY <<JIFFYDIFFY
|
||||
_______________________________________________________________________
|
||||
______ /__(_)__ __/__ __/____ ____ __ \__(_)__ __/__ __/____ __
|
||||
___ _ /__ /__ /_ __ /_ __ / / /_ / / /_ /__ /_ __ /_ __ / / /
|
||||
/ /_/ / _ / _ __/ _ __/ _ /_/ /_ /_/ /_ / _ __/ _ __/ _ /_/ /_
|
||||
\____/ /_/ /_/ /_/ _\__, / /_____/ /_/ /_/ /_/ _\__, /__
|
||||
__________________________ /____/____________________________ /____/___
|
||||
|
||||
~~~~~~~~ We'll have your diff up in a jiffy! ~~~~~~~~
|
||||
JIFFYDIFFY
|
||||
echo >&2 "$JIFFYDIFFY"
|
||||
|
||||
auto_track_pattern=$(jj config get remotes.origin.auto-track-bookmarks)
|
||||
if [[ $auto_track_pattern != *"/*" || $auto_track_pattern == *'"'* ]]; then
|
||||
echo >&2 "$0: Unsupported auto-track-bookmarks setting: $auto_track_pattern"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
git_push_bookmark_template=$(jj config get templates.git_push_bookmark)
|
||||
if [[ $git_push_bookmark_template != '"'$auto_track_pattern ]]; then
|
||||
# If auto-track-bookmarks is 'colin/*', the template must begin with '"colin/'
|
||||
echo >&2 "$0: Unsupported git_push_bookmark template: $git_push_bookmark_template"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! changes=($(jj log -r stack --no-graph --reversed -T 'change_id ++ "\n"')); then
|
||||
echo >&2 "$0: Failed to list the current stack"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Push any changes that don't have auto-tracked bookmarks yet
|
||||
bookmarkless='stack ~ bookmarks("'"$auto_track_pattern"'")'
|
||||
if (( $(jj log -r "$bookmarkless" --count) )); then
|
||||
if ! jj git push -c "$bookmarkless"; then
|
||||
echo >&2 "$0: Failed to push changes without bookmarks"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
bookmarks=()
|
||||
for change in "${changes[@]}"; do
|
||||
if ! change_bookmarks=($(jj log -r "$change" --no-graph -T 'local_bookmarks.map(|b| b.name() ++ "\n")')); then
|
||||
echo >&2 "$0: Failed to list bookmarks for change $change"
|
||||
exit 1
|
||||
fi
|
||||
for cb in "${change_bookmarks[@]}"; do
|
||||
if [[ $cb == $auto_track_pattern ]]; then
|
||||
bookmarks+=("$cb")
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
if (( ${#bookmarks[@]} != ${#changes[@]} )); then
|
||||
echo >&2 "$0: Too many bookmarks; aborting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for (( i = ${#bookmarks[@]} - 1; i >= 0; i-- )); do
|
||||
if ! gt untrack "${bookmarks[i]}" --force; then
|
||||
echo >&2 "$0: 'gt untrack' failed; aborting"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# TODO: Figure out the correct base for the stack instead of assuming main.
|
||||
# It might be someone else's PR. Might make sense to find the first non-tracked
|
||||
# remote bookmark?
|
||||
previous=main
|
||||
for b in "${bookmarks[@]}"; do
|
||||
if ! gt track "$b" --parent "$previous"; then
|
||||
echo >&2 "$0: 'gt track' failed; aborting"
|
||||
exit 1
|
||||
fi
|
||||
previous=$b
|
||||
done
|
||||
|
||||
if ! gt submit --draft --no-edit --branch "${bookmarks[-1]}" --force; then
|
||||
echo >&2 "$0: 'gt submit' failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Update jj state after the gt-submit
|
||||
jj util snapshot
|
||||
|
||||
Reference in New Issue
Block a user