update
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env bash
|
||||
# Shared non-destructive Git update helpers for TA-ProxMenu.
|
||||
|
||||
TAPM_GIT_WORKTREE_DIRTY() {
|
||||
local repository="$1"
|
||||
|
||||
[[ -n "$(git -C "$repository" status --porcelain --untracked-files=normal 2>/dev/null)" ]]
|
||||
}
|
||||
|
||||
TAPM_GIT_FETCH_BRANCH() {
|
||||
local repository="$1"
|
||||
local branch="$2"
|
||||
local timeout_seconds="${3:-30}"
|
||||
|
||||
timeout "$timeout_seconds" git -C "$repository" fetch --prune origin \
|
||||
"+refs/heads/${branch}:refs/remotes/origin/${branch}"
|
||||
}
|
||||
|
||||
TAPM_GIT_RELATION() {
|
||||
local repository="$1"
|
||||
local local_ref="$2"
|
||||
local remote_ref="$3"
|
||||
local local_commit
|
||||
local remote_commit
|
||||
|
||||
local_commit="$(git -C "$repository" rev-parse --verify "${local_ref}^{commit}" 2>/dev/null)" ||
|
||||
return 1
|
||||
remote_commit="$(git -C "$repository" rev-parse --verify "${remote_ref}^{commit}" 2>/dev/null)" ||
|
||||
return 1
|
||||
|
||||
if [[ "$local_commit" == "$remote_commit" ]]; then
|
||||
printf 'current\n'
|
||||
elif git -C "$repository" merge-base --is-ancestor "$local_commit" "$remote_commit"; then
|
||||
printf 'behind\n'
|
||||
elif git -C "$repository" merge-base --is-ancestor "$remote_commit" "$local_commit"; then
|
||||
printf 'ahead\n'
|
||||
else
|
||||
printf 'diverged\n'
|
||||
fi
|
||||
}
|
||||
|
||||
TAPM_GIT_BRANCH_STATE() {
|
||||
local repository="$1"
|
||||
local branch="$2"
|
||||
local current_branch
|
||||
|
||||
[[ -d "${repository}/.git" ]] || {
|
||||
printf 'unavailable\n'
|
||||
return 1
|
||||
}
|
||||
|
||||
current_branch="$(git -C "$repository" branch --show-current 2>/dev/null)"
|
||||
if [[ -z "$current_branch" ]]; then
|
||||
printf 'detached\n'
|
||||
return 0
|
||||
fi
|
||||
if [[ "$current_branch" != "$branch" ]]; then
|
||||
printf 'wrong-branch\n'
|
||||
return 0
|
||||
fi
|
||||
if TAPM_GIT_WORKTREE_DIRTY "$repository"; then
|
||||
printf 'dirty\n'
|
||||
return 0
|
||||
fi
|
||||
|
||||
TAPM_GIT_RELATION "$repository" HEAD "refs/remotes/origin/${branch}" || {
|
||||
printf 'unavailable\n'
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
TAPM_GIT_FAST_FORWARD() {
|
||||
local repository="$1"
|
||||
local branch="$2"
|
||||
|
||||
git -C "$repository" merge --ff-only "refs/remotes/origin/${branch}"
|
||||
}
|
||||
Reference in New Issue
Block a user