Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Git helper shell scripts for MarlinFirmware #3567

Merged
merged 1 commit into from
Apr 19, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Marlin/scripts/firstpush
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env bash

git push --set-upstream origin `git branch | grep \* | sed 's/\* //g'`
40 changes: 40 additions & 0 deletions Marlin/scripts/mfinfo
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#!/usr/bin/env bash
#
# mfinfo
#
# Get the following helpful git info about the working directory:
#
# - Remote (upstream) Org name (MarlinFirmware)
# - Remote (origin) Org name (your Github username)
# - Repo Name (Marlin or MarlinDev)
# - Marlin Target branch (RCBugFix or dev)
# - Branch Name (the current branch or the one that was passed)
#

REPO=$(git remote get-url upstream 2>/dev/null | sed -E 's/.*\/(.*)\.git/\1/')

if [[ -z $REPO ]]; then
echo "`basename $0`: No 'upstream' remote found." 1>&2 ; exit 1
fi

ORG=$(git remote get-url upstream 2>/dev/null | sed -E 's/.*[\/:](.*)\/.*$/\1/')

if [[ $ORG != MarlinFirmware ]]; then
echo "`basename $0`: Not a Marlin repository."
exit 1
fi

case "$REPO" in
Marlin ) TARG=RCBugFix ;;
MarlinDev ) TARG=dev ;;
esac

FORK=$(git remote get-url origin 2>/dev/null | sed -E 's/.*[\/:](.*)\/.*$/\1/')

case "$#" in
0 ) BRANCH=$(git branch 2>/dev/null | grep ^* | sed 's/\* //g') ;;
1 ) BRANCH=$1 ;;
* ) echo "Usage: `basename $0` [branch]" 1>&2 ; exit 1 ;;
esac

echo "$ORG $FORK $REPO $TARG $BRANCH"
23 changes: 23 additions & 0 deletions Marlin/scripts/mfnew
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/usr/bin/env bash
#
# mfnew
#
# Create a new branch based on RCBugFix or dev a given branch name
#

MFINFO=$(mfinfo) || exit
IFS=' ' read -a INFO <<< "$MFINFO"
TARG=${INFO[3]}

if [[ ${INFO[4]} == "(no" ]]; then
echo "Branch is unavailable!"
exit 1
fi

case "$#" in
0 ) BRANCH=pr_for_$TARG-$(date +"%G-%d-%m|%H:%M:%S") ;;
1 ) BRANCH=$1 ;;
* ) echo "Usage: `basename $0` [branch]" 1>&2 ; exit 1 ;;
esac

git checkout $TARG -b $BRANCH
40 changes: 40 additions & 0 deletions Marlin/scripts/mfpr
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#!/usr/bin/env bash
#
# mfpr
#
# Make a PR of the current branch against RCBugFix or dev
#

MFINFO=$(mfinfo "$@") || exit

IFS=' ' read -a INFO <<< "$MFINFO"

ORG=${INFO[0]}
FORK=${INFO[1]}
REPO=${INFO[2]}
TARG=${INFO[3]}
BRANCH=${INFO[4]}

if [[ $BRANCH == "(no" ]]; then
echo "Git is busy with merge, rebase, etc."
exit 1
fi

if [[ ! -z "$1" ]]; then { BRANCH=$1 ; git checkout $1 || exit 1; } fi

if [[ $BRANCH == $TARG ]]; then
echo "Can't make a PR from $BRANCH" ; exit
fi

if [ -z "$(git branch -vv | grep ^\* | grep \\[origin)" ]; then firstpush; fi

TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }')
URL="https://github.com/$ORG/$REPO/compare/$TARG...$FORK:$BRANCH?expand=1"

if [ -z "$TOOL" ]; then
echo "Can't find a tool to open the URL:"
echo $URL
else
echo "Opening a New PR Form..."
"$TOOL" "$URL"
fi
22 changes: 22 additions & 0 deletions Marlin/scripts/mfprune
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env bash
#
# mfprune
#
# Prune all your merged branches and any branches whose remotes are gone
# Great way to clean up your branches after messing around a lot
#

echo "Pruning Merged Branches..."
git branch --merged | egrep -v "^\*|RC|RCBugFix|dev" | xargs -n 1 git branch -d
echo

echo "Pruning Remotely-deleted Branches..."
git branch -vv | egrep -v "^\*|RC|RCBugFix|dev" | grep ': gone]' | gawk '{print $1}' | xargs -n 1 git branch -D
echo

echo "You may want to remove these remote tracking references..."
comm -23 \
<(git branch --all | sed 's/^[\* ] //' | grep origin/ | grep -v "\->" | awk '{ print $1; }' | sed 's/remotes\/origin\///') \
<(git branch --all | sed 's/^[\* ] //' | grep -v remotes/ | awk '{ print $1; }') \
| awk '{ print "git branch -d -r origin/" $1; }'
echo
21 changes: 21 additions & 0 deletions Marlin/scripts/mfrb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
#
# mfrb
#
# Do "git rebase -i" against the "target" branch (RCBugFix or dev)
#

MFINFO=$(mfinfo) || exit
IFS=' ' read -a INFO <<< "$MFINFO"

if [[ ${INFO[4]} == "(no" ]]; then
echo "Branch is unavailable!"
exit 1
fi

case "$#" in
0 ) ;;
* ) echo "Usage: `basename $0`" 1>&2 ; exit 1 ;;
esac

git rebase -i ${INFO[3]}
53 changes: 53 additions & 0 deletions Marlin/scripts/mfup
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/usr/bin/env bash
#
# mfup
#
# Fetch and merge upstream changes, optionally with a branch
#

MFINFO=$(mfinfo) || exit

IFS=' ' read -a INFO <<< "$MFINFO"

ORG=${INFO[0]}
FORK=${INFO[1]}
REPO=${INFO[2]}
TARG=${INFO[3]}
OLDBRANCH=${INFO[4]}

if [[ $OLDBRANCH == "(no" ]]; then
echo "Branch is unavailable!"
exit 1
fi

case "$#" in
0 ) BRANCH=$OLDBRANCH ;;
1 ) BRANCH=$1 ;;
* ) echo "Usage: `basename $0` [branch]" 1>&2 ; exit 1 ;;
esac

set -e

echo "Fetching upstream ($ORG/$REPO)..."
git fetch upstream

echo ; echo "Bringing $TARG up to date..."
git checkout -q $TARG || git branch checkout upstream/$TARG -b $TARG && git push --set-upstream origin $TARG
git merge upstream/$TARG
git push origin

if [[ $BRANCH != $TARG ]]; then
echo ; echo "Rebasing $BRANCH on $TARG..."
if git checkout $BRANCH; then
echo
if git rebase $TARG; then
git push -f ; echo
[[ $BRANCH != $OLDBRANCH ]] && git checkout $OLDBRANCH
else
echo "Looks like merge conflicts. Stopping here."
fi
else
echo "No such branch!" ; echo
git checkout $OLDBRANCH
fi
fi