13cc20cf |
#:depends-on:git-get
|
9dc16eeb |
autoload -U regexp-replace
|
70e8006a |
GIT_DEBUG=0
|
7d0d88b2 |
GIT_CMD="`which -p git 2>/dev/null`"
GTI_CMD="`which -p gti 2>/dev/null`"
|
fe429cbf |
|
ae56548a |
FWOAR_GIT_DIR=("$HOME"/git*repos)
|
8ef8fa75 |
if ! [[ -d "$HOME/git*_repos" ]]; then
mkdir -p "$HOME"/git_repos
fi
|
e3812eea |
git-rb() {
FW_GIT_URL=$1
FW_GIT_BRANCH=""
if [[ "$2" == */* ]]; then
FW_GIT_REF="$2"
else
FW_GIT_BRANCH=$2
FW_GIT_REF=refs/heads/"$FW_GIT_BRANCH"
fi
|
43af1b23 |
read -A results < <( git ls-remote "$FW_GIT_URL" "$2" | tr '\n' '\t')
for (( idx=1; idx < ${#results}; idx += 2 )); do
jq -n --arg url "$FW_GIT_URL" \
--arg branch "$FW_GIT_BRANCH" \
--arg hash "$results[$idx]" \
--arg ref "$results[$((idx+1))]" \
'{hash: $hash, ref: $ref, url: $url, branch: $branch}'
done
|
e3812eea |
}
|
1eb57280 |
git-pwdurl () {
set -x
local -a parts
parts=(${(s:/:)PWD})
repo_root=${parts[(I)git_repos]}
site_idx=$((repo_root + 1))
repo_idx=$((repo_root + 2))
repo=${(j:/:)parts[$repo_idx,-1]}
site=${parts[$site_idx]}
case "$1" in
git) echo "git://$site:$repo.git"
;;
ssh) echo git@$site:$repo.git
;;
*) echo https://$site/$repo.git
;;
esac
}
git-cpwd () {
|
bc035061 |
git clone --recursive "$(git-pwdurl "$1")" .
|
1eb57280 |
}
|
f48ed522 |
git-fp() {
$(pbpaste | grep git\ push)
}
|
fe429cbf |
git-bump() {
git commit -m "${SITE_PREFIX:-}(bump)" --allow-empty
}
|
4ae7c492 |
git-update-repos() {
find . -name .git | (
while read -r repo; do
printf "---\n$repo\n";
git --work-tree="${repo%/*}" --git-dir="$repo" pull --ff-only ;
printf "\n\n"
done
)
}
|
64b97809 |
git-ub() {
git stash || exit 1
git pull --rebase
git stash pop
}
|
70e8006a |
git-ufgrep() {
PATTERN="$1"
if [[ ${PATTERN}x == ""x ]]; then
PATTERN='.*'
fi
PATTERN="${PATTERN//\//\\/}"
if [[ "$GIT_DEBUG" == 1 ]]; then
echo "$PATTERN"
fi
git status --porcelain | awk '$1 == "??" && $2 ~ /[.]'"$PATTERN"'$/'
}
git-run() {
(
DIR="$1"
shift
git cd "$DIR"
exec "$@"
)
}
git-back() {
git checkout -
}
git-ff() {
|
64b97809 |
git merge --ff-only
}
git-pff() {
|
70e8006a |
git pull --ff-only
}
|
cd103bde |
git-root() {
|
eb65d556 |
rootpath="$(git rev-parse --show-toplevel)"
echo "$rootpath/$1"
|
70e8006a |
}
git-ag() {
|
64b97809 |
ag "$@" -- "$(git-root)"
|
cd103bde |
}
|
70e8006a |
git-cd() {
cd "$(git-root)/$1"
}
alias groot=git-cd
|
cd103bde |
|
06f3ccaf |
git-graph() {
git log --graph --format=oneline --decorate "$@"
}
alias gl=git-graph
|
eb65d556 |
git-find-tag() {
git log --format=oneline --all |
gawk -vtofind="$*" -vFS=$'[ ]+|:[ ]*' \
'tolower($2) == "code" {$2=$2" "$3; for (i=3;i<NF;i++) $i=$(i+1); $NF=""} \
{code=$2; hash=$1; for (i=1;i<=NF-2;i++) $i=$(i+2); NF=NF-2} \
code ~ tofind {print code": "hash" "$0}'
}
|
64b97809 |
git-messages() {
if [[ -d .git ]]; then
echo "Git log messages:"
git log -n 5 | egrep --color=yes -Io '(TODO|NOTE|FIXME|BUG|DONE):.*$'
fi
|
06f3ccaf |
|
64b97809 |
echo "Messages from files:"
egrep --color=yes -IHnro '(TODO|NOTE|FIXME|BUG):.*$' . |
psc '
for line in sys.stdin:
line = line.strip().split(":", 2)
print("%s\n\t%s" % (":".join(line[2:]), ":".join(line[:2])))'
|
cd103bde |
}
|
9dc16eeb |
git-gh-create() {
|
41339c2f |
local organization_name=${1?need a repo name or org/repo pair}
local repo_name=${2:-$organization_name}
local api_url=https://api.github.com/user/repos
if (( $# == 2 )) {
api_url="https://api.github.com/orgs/$organization_name/repos"
|
1eb57280 |
}
|
41339c2f |
|
1eb57280 |
regexp-replace repo_name '[" ]' '-'
local GH_TOKEN
source "$HOME/.github-token"
jq '{full_name, clone_url, ssh_url}' <( (
curl -XPOST -v \
-u "fiddlerwoaroof:$GH_TOKEN" \
"$api_url" \
-H 'Content-Type: application/json' \
--data-binary @- <<-EOF
|
9dc16eeb |
{
"name": "${repo_name}"
}
EOF
|
1eb57280 |
) )
|
9dc16eeb |
}
|
64b97809 |
alias git-msg=git-messages
|
13cc20cf |
alias git-cj="git-get cj"
alias git-hub="git-get github"
alias git-lab="git-get gitlab"
alias gh="git-hub"
|
06f3ccaf |
|
64b97809 |
if [[ ! -z "$GIT_CMD" ]]; then
|
cd103bde |
# git wrapper that mimics the functionality of git for commandlets but also
# searches shell functions.
|
70e8006a |
git() {
|
13cc20cf |
local possible_cmd
local cmdlets
|
64b97809 |
|
13cc20cf |
possible_cmd="${${$(expand-alias "git-$1")#'}%'}"
|
7d0d88b2 |
printf "%s" "$possible_cmd" | read -A cmdlets
|
13cc20cf |
if [[ "$GIT_DEBUG" != "0" ]]; then
echo "git: looking for: \"$possible_cmd\" command: \"${cmdlets[1]}\""
fi
if is-function "${cmdlets[1]}"; then
"${cmdlets[@]}" "${@[2,-1]}"
|
cd103bde |
else
|
64b97809 |
"$GIT_CMD" "$@"
|
cd103bde |
fi
}
fi
|
67761e9d |
cr() {
cd "$(fzf --preview='git --git-dir={1}/.git --work-tree={1} status' < "$HOME"/.git_repos)"
}
|