Hi,

On Tue, 29 Apr 2008, Helge Kreutzmann wrote:
> Hello,
> looking at the source, the string
>    unstable to append to %s
> probably means
>    unable to append to %s
> 
> Could you update the lenny branch accordingly after fixing?

I pushed a fix in the lenny branch, it will be merged in the master
branch later on (probably right after the upload).

> P.S. The nice git-wrapper script does not work on the lenny branch, is
>      it acceptable to run "git commit files" and "git push" (with only
>      one commit before the push) on this branch?

Please find attached an updated version that should also work on the lenny
branch (and any other branch which has a origin/$branch counterpart).

Thanks for reporting!

Cheers,
-- 
Raphaël Hertzog

Le best-seller français mis à jour pour Debian Etch :
http://www.ouaza.com/livre/admin-debian/
#!/bin/sh

# Copyright 2007-2008 Raphael Hertzog <[EMAIL PROTECTED]>
#
# 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'"
                git push
            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

Reply via email to