[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Git-Wrapper no longer working?



Hello Raphaël,
On Sat, Mar 03, 2012 at 03:19:07PM +0100, Raphael Hertzog wrote:
> On Sat, 03 Mar 2012, Helge Kreutzmann wrote:
> > after the recent git update in testing the wrapper stopped working:
> > 
> > ~/skripte/git-wrapper udpate
> > /home/helge/skripte/git-wrapper: invalid syntax
> > /home/helge/skripte/git-wrapper update: update the current branch of the repository
> > /home/helge/skripte/git-wrapper commit: commit and push the changes to the remote repository
> > 
> > Could you check and update the script?
> 
> I no longer have a copy of the script. Can you attach it?

It is attached.

> In any case, Git has improved since then and it's probably not very
> useful anymore.

If I should simply "git push" and "git pull" thats fine with me as
well, just last time this was not desired.

Thanks!

Greetings

         Helge

-- 
      Dr. Helge Kreutzmann                     debian@helgefjell.de
           Dipl.-Phys.                   http://www.helgefjell.de/debian.php
        64bit GNU powered                     gpg signed mail preferred
           Help keep free software "libre": http://www.ffii.de/
#!/bin/sh

# Copyright 2007-2008 Raphael Hertzog <hertzog@debian.org>
#
# This program is free software; you may redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This is distributed in the hope that it will be useful, but without
# any warranty; without even the implied warranty of merchantability or
# fitness for a particular purpose. See the GNU General Public License
# for more details.
#
# A copy of the GNU General Public License is available as
# /usr/share/common-licenses/GPL in the Debian GNU/Linux distribution
# or on the World Wide Web at http://www.gnu.org/copyleft/gpl.html.
# You can also obtain it by writing to the Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.

# This script is only meant to be used in the master branch of dpkg
# This branch is created by default by a git clone
# ssh://git.debian.org/git/dpkg/dpkg.git

# Git 1.5.3 is required (for git-stash)

has_changes_in_index() {
    # git-diff --quiet returns 1 when there are changes
    if git diff --quiet --cached; then
	return 1
    else
	return 0
    fi
}
has_changes_in_working_tree() {
    # git-diff --quiet returns 1 when there are changes
    if git diff --quiet; then
	return 1
    else
	return 0
    fi
}
is_uptodate() {
    unmerged=`git rev-list origin/$branch ^HEAD`
    if test -z "$unmerged"; then
	return 0
    else
	return 1
    fi
}
has_unpushed_commits() {
    unpushed=`git rev-list HEAD ^origin/$branch`
    if test -n "$unpushed"; then
	return 0
    else
	return 1
    fi
}

test -d .git || {
    echo "This script must be called from the root of dpkg's git repository." >&2
    exit
}
branch=`git branch | grep ^* | awk '{print $2}'`
if ! git branch -r | grep -q " origin/$branch$"; then
    echo "This script must be called from a branch which also exist on the remote side." >&2
    echo "The current branch is '$branch' but 'origin/$branch' doesn't exist." >&2
    exit
fi

case $1 in
    update)
	git fetch --quiet origin

	if has_unpushed_commits; then
	    echo "** You have local commits that were not pushed to the remote repository."
	    if is_uptodate; then
		echo "** They are still OK to be pushed."
	    else
		echo "** The remote repository has evolved. Rebasing your work."
		$0 rebase
	    fi
	else
	    if ! is_uptodate; then
		echo "** The remote repository has changed. Trying to update."
		git merge origin/$branch
		result=$?
		if [ $result -eq 0 ]; then
		    echo "** The repository has been updated."
		elif [ $result -eq 1 ]; then
		    echo "** The repository has been updated but there have been conflicts:"
		    git ls-files --unmerged | awk '{print $4}' | uniq -c
		else
		    echo "** The automatic merge failed. Trying another strategy."
		    echo "** Pushing local changes aside with git stash."
		    git stash save "WIP saved by dpkg-vcs"
		    echo "** Merging remote changes, should result in fast-forward."
		    git merge origin/$branch
		    echo "** Reapplying local changes with git stash apply."
		    git stash apply
		    result=$?
		    if [ $result -eq 0 ]; then
			echo "** Local changes have been merged."
		    elif [ $result -eq 1 ]; then
			echo "** Local changes have been merged but there have been conflicts:"
			git ls-files --unmerged | awk '{print $4}' | uniq -c
		    else
			echo "** git stash apply failed badly and returned $result."
			echo "** You're on your own..."
			exit 2
		    fi
		fi
	    else
		echo "** Nothing updated, the remote respository hasn't changed."
	    fi
	fi

    ;;
    commit)
	git fetch --quiet origin

	if ! is_uptodate; then
	    echo "** You're not up-to-date, please do '$0 update' first."
	    exit 1
	fi

	if has_changes_in_index || has_changes_in_working_tree; then
	    echo "** Committing changes locally."
	    git commit -a || {
		echo "** git commit failed, stopping here."
		exit 1
	    }
	fi

	if has_unpushed_commits; then
	    echo "** Pushing your changes to the remote repository."
	    echo "Here's a resume of what you're going to push:"
	    git rev-list --pretty=oneline --abbrev-commit $branch ^origin/$branch
	    echo "** Do you confirm that you want to push? [Yn] "
	    read answer
	    if [ "$answer" = "" ] || [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
		echo "** Calling 'git push origin $branch'"
		git push origin $branch
	    fi
	fi

    ;;
    rebase)
	git fetch --quiet origin

	if [ -z "$2" ]; then
	    echo "** Starting a rebase process..."
	    git rebase origin/$branch
	    result=$?
	else
	    if [ "$2" = "--continue" ] || [ "$2" = "--skip" ]; then
		if [ "$2" = "--continue" ]; then
		    for file in `git ls-files --unmerged | awk '{print $4}' | uniq`; do
		        git add $file
		    done
		fi
		git rebase $2
		result=$?
	    else
		echo "Invalid option for '$0 rebase': $2" >&2
		exit 1
	    fi
	fi

	if [ $result -eq 0 ]; then
	    echo "** The rebase process is finished. Your repository is up-to-date."
	    exit 0
	elif [ $result -eq 1 ]; then
	    echo "** Rebase process interrupted by conflicts."
	    echo "** Edit the files below and fix all the conflicts,"
	    echo "** then call '$0 rebase --continue':"
	    git ls-files --unmerged | awk '{print $4}' | uniq -c
	    exit 1
	else
	    echo "** The rebase process miserably failed for an unknown reason."
	    echo "** Aborting it."
	    git rebase --abort
	    exit 2
	fi
    ;;
    *)
    echo "$0: invalid syntax" >&2
    echo "$0 update: update the current branch of the repository" >&2
    echo "$0 commit: commit and push the changes to the remote repository" >&2
    ;;
esac

Attachment: signature.asc
Description: Digital signature


Reply to: