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: