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

Bug#847043: O: gnulib -- GNU Portability Library



Package: wnpp
Severity: normal

Hi,

I'm orphaning gnulib, it is way too long since I've kept up with
maintaining it.

The package description is:
 The GNU portability library is a macro system and C declarations and
 definitions for commonly-used API elements and abstracted system behaviors. It
 can be used to improve portability and other functionality in your programs.

Note that the source package also produces the git-merge-changelog
package, to aid in merging GNU-style ChangeLogs.

If you adopt gnulib, consider also creating and releasing upstream
stable snapshots, and using them as a source for the debian package.

I've attached the script and HOWTO I wrote to document the process of
creating stable snapshots.

My git repo is at:

git://erislabs.net/gnulib.git

http://erislabs.net/gitweb?p=gnulib.git

Branches are:

upstream - upstream master, unmodified
stable - stable snapshots
master - debian packaging

The upstream repo is at:

git://git.savannah.gnu.org/gnulib.git

http://git.savannah.gnu.org/gitweb/?p=gnulib.git

and the upstream mailing list is:

bug-gnulib@gnu.org

https://lists.gnu.org/mailman/listinfo/bug-gnulib

any questions, ask me or maybe the upstream mailing list

cheers,

Ian.
		 How to make a gnulib stable snapshot
		 ------------------------------------

by Ian Beckwith <ianb@erislabs.net>
Last Update: Tue Apr 24 2010
Latest Version: http://erislabs.net/projects/gnulib/STABLE-HOWTO.html

BRANCHES

   * upstream - tracks git://git.savannah.gnu.org/gnulib.git
   * stable   - the stable snapshot we produce, based on upstream
   * master   - the debian branch, based on stable (optional)

PROCEDURE

   * if you don't already have a repository:

     + clone the gnulib repo:
         $ git clone git://git.savannah.gnu.org/gnulib.git
	 $ git branch -m master upstream

     + then either import the existing stable repo:
         $ git remote add erislabs git://erislabs.net/gnulib.git
	 $ git fetch erislabs
	 $ git branch stable erislabs/stable

     + or, if that isn't possible, start from scratch:
         $ git branch stable upstream

   * update upstream branch:
         $ git checkout upstream
         $ git pull

   * tag the current upstream HEAD for later use:
         $ git tag snapshot-start upstream

   * run the test suite:
         $ git checkout upstream
         $ ./gnulib-tool --create-megatestdir --with-tests  --dir=t 2>&1 | tee create.out
         $ cd t
         $ ./do-autobuild 2>&1 | tee ../build.out
         $ cd ..

   * find failing tests with:
         $ grep -L rc=0 t/logs/*

   * report any issues to bug-gnulib@gnu.org

   * merge the current upstream version into the stable branch:
         $ git checkout stable
         $ git merge upstream

   * resolve conflicts
         $ git checkout upstream <all conflicting paths except NEWS.stable>
         $ git commit -a

   * wait a week or so

   * update upstream branch:
         $ git checkout upstream
         $ git pull

   * create list of commits to review:
         $ git log --oneline --reverse --topo-order snapshot-start..upstream > ../stable.log

   * return to the stable branch
         $ git checkout stable

   * prepare NEWS.stable for new release.

     + add new header

     + add __NEXTCOMMITMARKER__ tag where you want commits to be logged

   * for each commit in ../stable.log:

     + review each commit in ../stable.log:
         $ git show commitid

     + if you want to cherry-pick that commit:
         $ stable-cherry-pick commitid
       (stable-cherry-pick source: http://erislabs.net/ianb/projects/gnulib/stable-cherry-pick)

     + if the cherry-pick fails:

       * resolve the conflict and commit, making a note of the new commitid

       * fill in the new commitid in NEWS.stable, then commit

   * remove __NEXTCOMMIT__ marker from NEWS.stable, commit

   * test (see above). If testsuite fails, check whether bug exists
     in upstream branch, report to bug-gnulib@gnu.org.

   * remove the temporary snapshot-start tag
          $ git tag -d snapshot-start

   * tag the new release
          $ git tag stable/yyyymmdd

   * create and upload tarball:
          $ git archive --format=tar --prefix=gnulib-yyyymmdd-stable/ stable/yyyymmdd | gzip -9 > ../gnulib-yymmdd-stable.tar.gz

   * push changes to stable git repository

   * mail announcement to bug-gnulib@gnu.org
#!/bin/sh
# stable-cherry-pick -- Cherry-pick commits into current branch and
#   log them to NEWS.stable. See STABLE-HOWTO for more info,
#   also at http://erislabs.net/projects/gnulib/STABLE-HOWTO.html

# Copyright (C) 2009-2010 Free Software Foundation, Inc.

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program 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.

# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Written by Ian Beckwith <ianb@erislabs.net> 20091114

PROGNAME="$(basename "$0")"
NEXTCOMMITMARKER="__NEXTCOMMITMARKER__"
NEWS="NEWS.stable"
TMP="$NEWS.tmp"

warn ()
{
    echo "$PROGNAME: $1"
    shift
    while [ $# -gt 0 ]; do
	echo " $1"
	shift
    done
}

fail ()
{
    warn "$@"
    exit 1
}

if [ $# -ne 1 ]; then
    echo "usage: $PROGNAME COMMIT-ID"
    echo " cherry-picks COMMIT-ID into current branch and logs it to $NEWS"
    exit 1
fi

COMMIT="$1"
git show "$COMMIT" > /dev/null 2>&1
if [ $? -ne 0 ];then
    fail "commit $COMMIT not found"
fi

SHORTCOMMIT="$(git log -1 --format=%h "$COMMIT")"
SUBJECT="$(git log -1 --format=%s "$COMMIT")"
CHERRYOUT="$(git cherry-pick -x "$COMMIT")"
CHERRYRES=$?
echo "$CHERRYOUT"
if [ $CHERRYRES -ne 0 ];then
     warn "cherry-pick failed, logging without new commit-id." \
	  "Resolve conflicts, commit then add new commit-id to ${NEWS}."
     CHERRYSHORTCOMMIT=""
else
    CHERRYFULLCOMMIT=$(echo "$CHERRYOUT" | grep '^\[[^ ]\+ [a-fA-F0-9]\+\] ' |sed 's/^\[[^ ]\+ \([a-fA-F0-9]\+\)\].*/\1/;')
    CHERRYSHORTCOMMIT="$(git log -1 --format=%h "$CHERRYFULLCOMMIT")"
fi

MESSAGE="[$SHORTCOMMIT]->[$CHERRYSHORTCOMMIT] $SUBJECT"
echo "    * $MESSAGE"

if [ ! -f "$NEWS" ]; then
    fail "$NEWS not found, not logging"
fi

if ! grep -q "$NEXTCOMMITMARKER" "$NEWS"; then
    fail "commit marker $NEXTCOMMITMARKER not found in ${NEWS}, not logging"
fi

sed "/$NEXTCOMMITMARKER/Q" < "$NEWS" > "$TMP"

echo "    * $MESSAGE" >> "$TMP"

sed -n  "/$NEXTCOMMITMARKER/,\$p" < "$NEWS" >> "$TMP"

mv "$TMP" "$NEWS"

if [ $? -ne 0 ]; then
    fail "failed to rename $TMP to $NEWS"
fi

# If cherry-pick succeeded, commit changes to $NEWS
if [ -n "$CHERRYSHORTCOMMIT" ]; then
    git add "$NEWS"
    git commit -m "$NEWS: log cherry-pick $MESSAGE"
fi

Reply to: