* [PATCH v5 01/10] release.sh: add signing and fix outdated commands
2025-02-26 14:50 [PATCH v5 00/10] Update release.sh Andrey Albershteyn
@ 2025-02-26 14:50 ` Andrey Albershteyn
2025-02-26 14:50 ` [PATCH v5 02/10] release.sh: add --kup to upload release tarball to kernel.org Andrey Albershteyn
` (8 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2025-02-26 14:50 UTC (permalink / raw)
To: linux-xfs; +Cc: Darrick J. Wong, Andrey Albershteyn
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
release.sh | 33 ++++++++++++++++++++++++++++-----
1 file changed, 28 insertions(+), 5 deletions(-)
diff --git a/release.sh b/release.sh
index 577257a354d442e1cc0a2b9381b11ffbe2f64a71..ea08ab334954e5b8aa40278a40cf7aceec2488cc 100755
--- a/release.sh
+++ b/release.sh
@@ -9,6 +9,8 @@
# configure.ac (with new version string)
# debian/changelog (with new release entry, only for release version)
+set -e
+
. ./VERSION
version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
@@ -16,21 +18,42 @@ date=`date +"%-d %B %Y"`
echo "Cleaning up"
make realclean
+rm -rf "xfsprogs-${version}.tar" \
+ "xfsprogs-${version}.tar.gz" \
+ "xfsprogs-${version}.tar.asc" \
+ "xfsprogs-${version}.tar.sign"
echo "Updating CHANGES"
sed -e "s/${version}.*/${version} (${date})/" doc/CHANGES > doc/CHANGES.tmp && \
mv doc/CHANGES.tmp doc/CHANGES
echo "Commiting CHANGES update to git"
-git commit -a -m "${version} release"
+git commit --all --signoff --message="xfsprogs: Release v${version}
+
+Update all the necessary files for a v${version} release."
echo "Tagging git repository"
-git tag -a -m "${version} release" v${version}
+git tag --annotate --sign --message="Release v${version}" v${version}
echo "Making source tarball"
make dist
+gunzip -k "xfsprogs-${version}.tar.gz"
-#echo "Sign the source tarball"
-#gpg --detach-sign xfsprogs-${version}.tar.gz
+echo "Sign the source tarball"
+gpg \
+ --detach-sign \
+ --armor \
+ "xfsprogs-${version}.tar"
-echo "Done. Please remember to push out tags using \"git push --tags\""
+echo "Verify signature"
+gpg \
+ --verify \
+ "xfsprogs-${version}.tar.asc"
+if [ $? -ne 0 ]; then
+ echo "Can not verify signature of tarball"
+ exit 1
+fi
+
+mv "xfsprogs-${version}.tar.asc" "xfsprogs-${version}.tar.sign"
+
+echo "Done. Please remember to push out tags using \"git push origin v${version}\""
--
2.47.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v5 02/10] release.sh: add --kup to upload release tarball to kernel.org
2025-02-26 14:50 [PATCH v5 00/10] Update release.sh Andrey Albershteyn
2025-02-26 14:50 ` [PATCH v5 01/10] release.sh: add signing and fix outdated commands Andrey Albershteyn
@ 2025-02-26 14:50 ` Andrey Albershteyn
2025-02-26 14:50 ` [PATCH v5 03/10] release.sh: update version files make commit optional Andrey Albershteyn
` (7 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2025-02-26 14:50 UTC (permalink / raw)
To: linux-xfs; +Cc: Darrick J. Wong, Andrey Albershteyn
Add kup support so that the maintainer can push the newly formed
release tarballs to kernel.org.
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
release.sh | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/release.sh b/release.sh
index ea08ab334954e5b8aa40278a40cf7aceec2488cc..42bee75bb6fde7056c1770157f253eb5f492036d 100755
--- a/release.sh
+++ b/release.sh
@@ -16,6 +16,30 @@ set -e
version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
date=`date +"%-d %B %Y"`
+KUP=0
+
+help() {
+ echo "$(basename $0) - prepare xfsprogs release tarball or for-next update"
+ printf "\t[--kup|-k] upload final tarball with KUP\n"
+}
+
+while [ $# -gt 0 ]; do
+ case "$1" in
+ --kup|-k)
+ KUP=1
+ ;;
+ --help|-h)
+ help
+ exit 0
+ ;;
+ *)
+ >&2 printf "Error: Invalid argument\n"
+ exit 1
+ ;;
+ esac
+ shift
+done
+
echo "Cleaning up"
make realclean
rm -rf "xfsprogs-${version}.tar" \
@@ -56,4 +80,11 @@ fi
mv "xfsprogs-${version}.tar.asc" "xfsprogs-${version}.tar.sign"
+if [ $KUP -eq 1 ]; then
+ kup put \
+ xfsprogs-${version}.tar.gz \
+ xfsprogs-${version}.tar.sign \
+ pub/linux/utils/fs/xfs/xfsprogs/
+fi;
+
echo "Done. Please remember to push out tags using \"git push origin v${version}\""
--
2.47.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v5 03/10] release.sh: update version files make commit optional
2025-02-26 14:50 [PATCH v5 00/10] Update release.sh Andrey Albershteyn
2025-02-26 14:50 ` [PATCH v5 01/10] release.sh: add signing and fix outdated commands Andrey Albershteyn
2025-02-26 14:50 ` [PATCH v5 02/10] release.sh: add --kup to upload release tarball to kernel.org Andrey Albershteyn
@ 2025-02-26 14:50 ` Andrey Albershteyn
2025-02-26 14:50 ` [PATCH v5 04/10] Add git-contributors script to notify about merges Andrey Albershteyn
` (6 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2025-02-26 14:50 UTC (permalink / raw)
To: linux-xfs; +Cc: Darrick J. Wong, Andrey Albershteyn
Based on ./VERSION script updates all other files. For
./doc/changelog script asks maintainer to fill it manually as not
all changes goes into changelog.
--no-commit|-n flag is handy when something got into the version commit
and need to be changed manually. Then ./release.sh -c will use fixed
history
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
release.sh | 75 ++++++++++++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 58 insertions(+), 17 deletions(-)
diff --git a/release.sh b/release.sh
index 42bee75bb6fde7056c1770157f253eb5f492036d..385607f636d965ad98f0f3115e6f34d9e4042592 100755
--- a/release.sh
+++ b/release.sh
@@ -11,16 +11,33 @@
set -e
-. ./VERSION
-
-version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
-date=`date +"%-d %B %Y"`
-
KUP=0
+COMMIT=1
help() {
echo "$(basename $0) - prepare xfsprogs release tarball or for-next update"
printf "\t[--kup|-k] upload final tarball with KUP\n"
+ printf "\t[--no-commit|-n] don't create release commit\n"
+}
+
+update_version() {
+ echo "Updating version files"
+ # doc/CHANGES
+ header="xfsprogs-${version} ($(date +'%d %b %Y'))"
+ sed -i "1s/^/$header\n\t<TODO list user affecting changes>\n\n/" doc/CHANGES
+ $EDITOR doc/CHANGES
+
+ # ./configure.ac
+ CONF_AC="AC_INIT([xfsprogs],[${version}],[linux-xfs@vger.kernel.org])"
+ sed -i "s/^AC_INIT.*/$CONF_AC/" ./configure.ac
+
+ # ./debian/changelog
+ sed -i "1s/^/\n/" ./debian/changelog
+ sed -i "1s/^/ -- Nathan Scott <nathans@debian.org> `date -R`\n/" ./debian/changelog
+ sed -i "1s/^/\n/" ./debian/changelog
+ sed -i "1s/^/ * New upstream release\n/" ./debian/changelog
+ sed -i "1s/^/\n/" ./debian/changelog
+ sed -i "1s/^/xfsprogs (${version}-1) unstable; urgency=low\n/" ./debian/changelog
}
while [ $# -gt 0 ]; do
@@ -28,6 +45,9 @@ while [ $# -gt 0 ]; do
--kup|-k)
KUP=1
;;
+ --no-commit|-n)
+ COMMIT=0
+ ;;
--help|-h)
help
exit 0
@@ -40,6 +60,36 @@ while [ $# -gt 0 ]; do
shift
done
+if [ -z "$EDITOR" ]; then
+ EDITOR=$(command -v vi)
+fi
+
+if [ $COMMIT -eq 1 ]; then
+ if git diff --exit-code ./VERSION > /dev/null; then
+ $EDITOR ./VERSION
+ fi
+fi
+
+. ./VERSION
+
+version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
+date=`date +"%-d %B %Y"`
+
+if [ $COMMIT -eq 1 ]; then
+ update_version
+
+ git diff --color=always | less -r
+ [[ "$(read -e -p 'All good? [Y/n]> '; echo $REPLY)" == [Nn]* ]] && exit 0
+
+ echo "Commiting new version update to git"
+ git commit --all --signoff --message="xfsprogs: Release v${version}
+
+Update all the necessary files for a v${version} release."
+
+ echo "Tagging git repository"
+ git tag --annotate --sign --message="Release v${version}" v${version}
+fi
+
echo "Cleaning up"
make realclean
rm -rf "xfsprogs-${version}.tar" \
@@ -47,17 +97,6 @@ rm -rf "xfsprogs-${version}.tar" \
"xfsprogs-${version}.tar.asc" \
"xfsprogs-${version}.tar.sign"
-echo "Updating CHANGES"
-sed -e "s/${version}.*/${version} (${date})/" doc/CHANGES > doc/CHANGES.tmp && \
- mv doc/CHANGES.tmp doc/CHANGES
-
-echo "Commiting CHANGES update to git"
-git commit --all --signoff --message="xfsprogs: Release v${version}
-
-Update all the necessary files for a v${version} release."
-
-echo "Tagging git repository"
-git tag --annotate --sign --message="Release v${version}" v${version}
echo "Making source tarball"
make dist
@@ -87,4 +126,6 @@ if [ $KUP -eq 1 ]; then
pub/linux/utils/fs/xfs/xfsprogs/
fi;
-echo "Done. Please remember to push out tags using \"git push origin v${version}\""
+echo ""
+echo "Done. Please remember to push out tags and the branch."
+printf "\tgit push origin v${version} master:master master:for-next\n"
--
2.47.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v5 04/10] Add git-contributors script to notify about merges
2025-02-26 14:50 [PATCH v5 00/10] Update release.sh Andrey Albershteyn
` (2 preceding siblings ...)
2025-02-26 14:50 ` [PATCH v5 03/10] release.sh: update version files make commit optional Andrey Albershteyn
@ 2025-02-26 14:50 ` Andrey Albershteyn
2025-02-26 14:50 ` [PATCH v5 05/10] git-contributors: better handling of hash mark/multiple emails Andrey Albershteyn
` (5 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2025-02-26 14:50 UTC (permalink / raw)
To: linux-xfs; +Cc: Darrick J. Wong, Andrey Albershteyn
Add python script used to collect emails over all changes merged in
the next release.
CC: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
tools/git-contributors.py | 101 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 101 insertions(+)
diff --git a/tools/git-contributors.py b/tools/git-contributors.py
new file mode 100755
index 0000000000000000000000000000000000000000..70ac8abb26c8ce65de336c5ae48abcfee39508b2
--- /dev/null
+++ b/tools/git-contributors.py
@@ -0,0 +1,101 @@
+#!/usr/bin/python3
+
+# List all contributors to a series of git commits.
+# Copyright(C) 2025 Oracle, All Rights Reserved.
+# Licensed under GPL 2.0 or later
+
+import re
+import subprocess
+import io
+import sys
+import argparse
+import email.utils
+
+DEBUG = False
+
+def backtick(args):
+ '''Generator function that yields lines of a program's stdout.'''
+ if DEBUG:
+ print(' '.join(args))
+ p = subprocess.Popen(args, stdout = subprocess.PIPE)
+ for line in io.TextIOWrapper(p.stdout, encoding="utf-8"):
+ yield line
+
+class find_developers(object):
+ def __init__(self):
+ tags = '%s|%s|%s|%s|%s|%s|%s|%s' % (
+ 'signed-off-by',
+ 'acked-by',
+ 'cc',
+ 'reviewed-by',
+ 'reported-by',
+ 'tested-by',
+ 'suggested-by',
+ 'reported-and-tested-by')
+ # some tag, a colon, a space, and everything after that
+ regex1 = r'^(%s):\s+(.+)$' % tags
+
+ self.r1 = re.compile(regex1, re.I)
+
+ def run(self, lines):
+ addr_list = []
+
+ for line in lines:
+ l = line.strip()
+
+ # emailutils can handle abominations like:
+ #
+ # Reviewed-by: Bogus J. Simpson <bogus@simpson.com>
+ # Reviewed-by: "Bogus J. Simpson" <bogus@simpson.com>
+ # Reviewed-by: bogus@simpson.com
+ # Cc: <stable@vger.kernel.org> # v6.9
+ # Tested-by: Moo Cow <foo@bar.com> # powerpc
+ m = self.r1.match(l)
+ if not m:
+ continue
+ (name, addr) = email.utils.parseaddr(m.expand(r'\g<2>'))
+
+ # This last split removes anything after a hash mark,
+ # because someone could have provided an improperly
+ # formatted email address:
+ #
+ # Cc: stable@vger.kernel.org # v6.19+
+ #
+ # emailutils doesn't seem to catch this, and I can't
+ # fully tell from RFC2822 that this isn't allowed. I
+ # think it is because dtext doesn't forbid spaces or
+ # hash marks.
+ addr_list.append(addr.split('#')[0])
+
+ return sorted(set(addr_list))
+
+def main():
+ global DEBUG
+
+ parser = argparse.ArgumentParser(description = "List email addresses of contributors to a series of git commits.")
+ parser.add_argument("revspec", nargs = '?', default = None, \
+ help = "git revisions to process.")
+ parser.add_argument("--separator", type = str, default = '\n', \
+ help = "Separate each email address with this string.")
+ parser.add_argument('--debug', action = 'store_true', default = False, \
+ help = argparse.SUPPRESS)
+ args = parser.parse_args()
+
+ if args.debug:
+ DEBUG = True
+
+ fd = find_developers()
+ if args.revspec:
+ # read git commits from repo
+ contributors = fd.run(backtick(['git', 'log', '--pretty=medium',
+ args.revspec]))
+ else:
+ # read patch from stdin
+ contributors = fd.run(sys.stdin.readlines())
+
+ print(args.separator.join(sorted(contributors)))
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())
+
--
2.47.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v5 05/10] git-contributors: better handling of hash mark/multiple emails
2025-02-26 14:50 [PATCH v5 00/10] Update release.sh Andrey Albershteyn
` (3 preceding siblings ...)
2025-02-26 14:50 ` [PATCH v5 04/10] Add git-contributors script to notify about merges Andrey Albershteyn
@ 2025-02-26 14:50 ` Andrey Albershteyn
2025-02-26 14:50 ` [PATCH v5 06/10] git-contributors: make revspec required and shebang fix Andrey Albershteyn
` (4 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2025-02-26 14:50 UTC (permalink / raw)
To: linux-xfs; +Cc: Darrick J. Wong, Andrey Albershteyn
Better handling of hash mark, tags with multiple emails and not
quoted names in emails. See comments in the script.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
tools/git-contributors.py | 109 ++++++++++++++++++++++++++++++++++++++--------
1 file changed, 90 insertions(+), 19 deletions(-)
diff --git a/tools/git-contributors.py b/tools/git-contributors.py
index 70ac8abb26c8ce65de336c5ae48abcfee39508b2..1a0f2b80e3dad9124b86b29f8507389ef91fe813 100755
--- a/tools/git-contributors.py
+++ b/tools/git-contributors.py
@@ -37,35 +37,106 @@ class find_developers(object):
self.r1 = re.compile(regex1, re.I)
+ # regex to guess if this is a list of multiple addresses.
+ # Not sure why the initial "^.*" is needed here.
+ self.r2 = re.compile(r'^.*,[^,]*@[^@]*,[^,]*@', re.I)
+
+ # regex to match on anything inside a pair of angle brackets
+ self.r3 = re.compile(r'^.*<(.+)>', re.I)
+
+ def _handle_addr(self, addr):
+ # The next split removes everything after an octothorpe (hash
+ # mark), because someone could have provided an improperly
+ # formatted email address:
+ #
+ # Cc: stable@vger.kernel.org # v6.19+
+ #
+ # This, according to my reading of RFC5322, is allowed because
+ # octothorpes can be part of atom text. However, it is
+ # interepreted as if there weren't any whitespace
+ # ("stable@vger.kernel.org#v6.19+"). The grammar allows for
+ # this form, even though this is not a correct Internet domain
+ # name.
+ #
+ # Worse, if you follow the format specified in the kernel's
+ # SubmittingPatches file:
+ #
+ # Cc: <stable@vger.kernel.org> # v6.9
+ #
+ # emailutils will not know how to parse this, and returns empty
+ # strings. I think this is because the angle-addr
+ # specification allows only whitespace between the closing
+ # angle bracket and the CRLF.
+ #
+ # Hack around both problems by ignoring everything after an
+ # octothorpe, no matter where it occurs in the string. If
+ # someone has one in their name or the email address, too bad.
+ a = addr.split('#')[0]
+
+ # emailutils can extract email addresses from headers that
+ # roughly follow the destination address field format:
+ #
+ # Reviewed-by: Bogus J. Simpson <bogus@simpson.com>
+ # Reviewed-by: "Bogus J. Simpson" <bogus@simpson.com>
+ # Reviewed-by: bogus@simpson.com
+ #
+ # Use it to extract the email address, because we don't care
+ # about the display name.
+ (name, addr) = email.utils.parseaddr(a)
+ if DEBUG:
+ print(f'A:{a}:NAME:{name}:ADDR:{addr}:')
+ if len(addr) > 0:
+ return addr
+
+ # If emailutils fails to find anything, let's see if there's
+ # a sequence of characters within angle brackets and hope that
+ # is an email address. This works around things like:
+ #
+ # Reported-by: Xu, Wen <wen.xu@gatech.edu>
+ #
+ # Which should have had the name in quotations because there's
+ # a comma.
+ m = self.r3.match(a)
+ if m:
+ addr = m.expand(r'\g<1>')
+ if DEBUG:
+ print(f"M3:{addr}:M:{m}:")
+ return addr
+
+ # No idea, just spit the whole thing out and hope for the best.
+ return a
+
def run(self, lines):
addr_list = []
for line in lines:
l = line.strip()
- # emailutils can handle abominations like:
- #
- # Reviewed-by: Bogus J. Simpson <bogus@simpson.com>
- # Reviewed-by: "Bogus J. Simpson" <bogus@simpson.com>
- # Reviewed-by: bogus@simpson.com
- # Cc: <stable@vger.kernel.org> # v6.9
- # Tested-by: Moo Cow <foo@bar.com> # powerpc
+ # First, does this line match any of the headers we
+ # know about?
m = self.r1.match(l)
if not m:
continue
- (name, addr) = email.utils.parseaddr(m.expand(r'\g<2>'))
+ rightside = m.expand(r'\g<2>')
- # This last split removes anything after a hash mark,
- # because someone could have provided an improperly
- # formatted email address:
- #
- # Cc: stable@vger.kernel.org # v6.19+
- #
- # emailutils doesn't seem to catch this, and I can't
- # fully tell from RFC2822 that this isn't allowed. I
- # think it is because dtext doesn't forbid spaces or
- # hash marks.
- addr_list.append(addr.split('#')[0])
+ n = self.r2.match(rightside)
+ if n:
+ # Break the line into an array of addresses,
+ # delimited by commas, then handle each
+ # address.
+ addrs = rightside.split(',')
+ if DEBUG:
+ print(f"0LINE:{rightside}:ADDRS:{addrs}:M:{n}")
+ for addr in addrs:
+ a = self._handle_addr(addr)
+ addr_list.append(a)
+ else:
+ # Otherwise treat the line as a single email
+ # address.
+ if DEBUG:
+ print(f"1LINE:{rightside}:M:{n}")
+ a = self._handle_addr(rightside)
+ addr_list.append(a)
return sorted(set(addr_list))
--
2.47.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v5 06/10] git-contributors: make revspec required and shebang fix
2025-02-26 14:50 [PATCH v5 00/10] Update release.sh Andrey Albershteyn
` (4 preceding siblings ...)
2025-02-26 14:50 ` [PATCH v5 05/10] git-contributors: better handling of hash mark/multiple emails Andrey Albershteyn
@ 2025-02-26 14:50 ` Andrey Albershteyn
2025-02-26 14:50 ` [PATCH v5 07/10] release.sh: generate ANNOUNCE email Andrey Albershteyn
` (3 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2025-02-26 14:50 UTC (permalink / raw)
To: linux-xfs; +Cc: Darrick J. Wong, Andrey Albershteyn
Without default value script will show help instead of just hanging
waiting for input on stdin.
Shebang fix for system with different python location than the
/usr/bin one.
Cut leading delimiter from the final CC string.
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
tools/git-contributors.py | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/tools/git-contributors.py b/tools/git-contributors.py
index 1a0f2b80e3dad9124b86b29f8507389ef91fe813..01177a9af749776ce4ac982f29f8f9302904d820 100755
--- a/tools/git-contributors.py
+++ b/tools/git-contributors.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python3
+#!/usr/bin/env python3
# List all contributors to a series of git commits.
# Copyright(C) 2025 Oracle, All Rights Reserved.
@@ -144,8 +144,7 @@ def main():
global DEBUG
parser = argparse.ArgumentParser(description = "List email addresses of contributors to a series of git commits.")
- parser.add_argument("revspec", nargs = '?', default = None, \
- help = "git revisions to process.")
+ parser.add_argument("revspec", help = "git revisions to process.")
parser.add_argument("--separator", type = str, default = '\n', \
help = "Separate each email address with this string.")
parser.add_argument('--debug', action = 'store_true', default = False, \
@@ -160,9 +159,6 @@ def main():
# read git commits from repo
contributors = fd.run(backtick(['git', 'log', '--pretty=medium',
args.revspec]))
- else:
- # read patch from stdin
- contributors = fd.run(sys.stdin.readlines())
print(args.separator.join(sorted(contributors)))
return 0
--
2.47.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v5 07/10] release.sh: generate ANNOUNCE email
2025-02-26 14:50 [PATCH v5 00/10] Update release.sh Andrey Albershteyn
` (5 preceding siblings ...)
2025-02-26 14:50 ` [PATCH v5 06/10] git-contributors: make revspec required and shebang fix Andrey Albershteyn
@ 2025-02-26 14:50 ` Andrey Albershteyn
2025-02-26 14:50 ` [PATCH v5 08/10] release.sh: add -f to generate for-next update email Andrey Albershteyn
` (2 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2025-02-26 14:50 UTC (permalink / raw)
To: linux-xfs; +Cc: Darrick J. Wong, Andrey Albershteyn
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
release.sh | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)
diff --git a/release.sh b/release.sh
index 385607f636d965ad98f0f3115e6f34d9e4042592..1c0c767863d6fe6572315ba26b58f66f8668a93c 100755
--- a/release.sh
+++ b/release.sh
@@ -13,11 +13,13 @@ set -e
KUP=0
COMMIT=1
+LAST_HEAD=""
help() {
echo "$(basename $0) - prepare xfsprogs release tarball or for-next update"
printf "\t[--kup|-k] upload final tarball with KUP\n"
printf "\t[--no-commit|-n] don't create release commit\n"
+ printf "\t[--last-head|-l] commit of the last release\n"
}
update_version() {
@@ -40,6 +42,48 @@ update_version() {
sed -i "1s/^/xfsprogs (${version}-1) unstable; urgency=low\n/" ./debian/changelog
}
+prepare_mail() {
+ branch="$1"
+ mail_file=$(mktemp)
+ if [ -n "$LAST_HEAD" ]; then
+ if [ $branch == "master" ]; then
+ reason="$(git describe --abbrev=0 $branch) released"
+ else
+ reason="for-next updated to $(git log --oneline --format="%h" -1 $branch)"
+ fi;
+ cat << EOF > $mail_file
+To: linux-xfs@vger.kernel.org
+Cc: $(./tools/git-contributors.py $LAST_HEAD..$branch --separator ', ')
+Subject: [ANNOUNCE] xfsprogs: $reason
+
+Hi folks,
+
+The xfsprogs $branch branch in repository at:
+
+ git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git
+
+has just been updated.
+
+Patches often get missed, so if your outstanding patches are properly reviewed
+on the list and not included in this update, please let me know.
+
+The for-next branch has also been updated to match the state of master.
+
+The new head of the $branch branch is commit:
+
+$(git log --oneline --format="%H" -1 $branch)
+
+New commits:
+
+$(git shortlog --format="[%h] %s" $LAST_HEAD..$branch)
+
+Code Diffstat:
+
+$(git diff --stat --summary -C -M $LAST_HEAD..$branch)
+EOF
+ fi
+}
+
while [ $# -gt 0 ]; do
case "$1" in
--kup|-k)
@@ -48,6 +92,10 @@ while [ $# -gt 0 ]; do
--no-commit|-n)
COMMIT=0
;;
+ --last-head|-l)
+ LAST_HEAD=$2
+ shift
+ ;;
--help|-h)
help
exit 0
@@ -126,6 +174,12 @@ if [ $KUP -eq 1 ]; then
pub/linux/utils/fs/xfs/xfsprogs/
fi;
+prepare_mail "master"
+
echo ""
echo "Done. Please remember to push out tags and the branch."
printf "\tgit push origin v${version} master:master master:for-next\n"
+if [ -n "$LAST_HEAD" ]; then
+ echo "Command to send ANNOUNCE email"
+ printf "\tneomutt -H $mail_file\n"
+fi
--
2.47.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v5 08/10] release.sh: add -f to generate for-next update email
2025-02-26 14:50 [PATCH v5 00/10] Update release.sh Andrey Albershteyn
` (6 preceding siblings ...)
2025-02-26 14:50 ` [PATCH v5 07/10] release.sh: generate ANNOUNCE email Andrey Albershteyn
@ 2025-02-26 14:50 ` Andrey Albershteyn
2025-02-26 14:50 ` [PATCH v5 09/10] libxfs-apply: drop Cc: to stable release list Andrey Albershteyn
2025-02-26 14:50 ` [PATCH v5 10/10] gitignore: ignore a few newly generated files Andrey Albershteyn
9 siblings, 0 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2025-02-26 14:50 UTC (permalink / raw)
To: linux-xfs; +Cc: Darrick J. Wong, Andrey Albershteyn
Add --for-next/-f to generate ANNOUNCE email for for-next branch
update. This doesn't require new commit/tarball/tags, so skip it.
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
release.sh | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/release.sh b/release.sh
index 1c0c767863d6fe6572315ba26b58f66f8668a93c..32084fb9fd904cf308135f842a20a5f9e8a99615 100755
--- a/release.sh
+++ b/release.sh
@@ -14,12 +14,14 @@ set -e
KUP=0
COMMIT=1
LAST_HEAD=""
+FOR_NEXT=0
help() {
echo "$(basename $0) - prepare xfsprogs release tarball or for-next update"
printf "\t[--kup|-k] upload final tarball with KUP\n"
printf "\t[--no-commit|-n] don't create release commit\n"
printf "\t[--last-head|-l] commit of the last release\n"
+ printf "\t[--for-next|-f] generate announce email for for-next update\n"
}
update_version() {
@@ -96,6 +98,9 @@ while [ $# -gt 0 ]; do
LAST_HEAD=$2
shift
;;
+ --for-next|-f)
+ FOR_NEXT=1
+ ;;
--help|-h)
help
exit 0
@@ -108,6 +113,17 @@ while [ $# -gt 0 ]; do
shift
done
+if [ $FOR_NEXT -eq 1 ]; then
+ echo "Push your for-next branch:"
+ printf "\tgit push origin for-next:for-next\n"
+ prepare_mail "for-next"
+ if [ -n "$LAST_HEAD" ]; then
+ echo "Command to send ANNOUNCE email"
+ printf "\tneomutt -H $mail_file\n"
+ fi
+ exit 0
+fi
+
if [ -z "$EDITOR" ]; then
EDITOR=$(command -v vi)
fi
--
2.47.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v5 09/10] libxfs-apply: drop Cc: to stable release list
2025-02-26 14:50 [PATCH v5 00/10] Update release.sh Andrey Albershteyn
` (7 preceding siblings ...)
2025-02-26 14:50 ` [PATCH v5 08/10] release.sh: add -f to generate for-next update email Andrey Albershteyn
@ 2025-02-26 14:50 ` Andrey Albershteyn
2025-02-26 14:50 ` [PATCH v5 10/10] gitignore: ignore a few newly generated files Andrey Albershteyn
9 siblings, 0 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2025-02-26 14:50 UTC (permalink / raw)
To: linux-xfs; +Cc: Darrick J. Wong, Andrey Albershteyn
These Cc: tags are intended for kernel commits which need to be
backported to stable kernels. Maintainers of stable kernel aren't
interested in xfsprogs syncs.
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
tools/libxfs-apply | 1 +
1 file changed, 1 insertion(+)
diff --git a/tools/libxfs-apply b/tools/libxfs-apply
index 097a695f942bb832c2fb1456a0fd8c28c025d1a6..e9672e572d23af296dccfe6499eda9b909f44afd 100755
--- a/tools/libxfs-apply
+++ b/tools/libxfs-apply
@@ -254,6 +254,7 @@ fixup_header_format()
}
/^Date:/ { date_seen=1; next }
/^difflib/ { next }
+ /[Cc]{2}: <?stable@vger.kernel.org>?.*/ { next }
// {
if (date_seen == 0)
--
2.47.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v5 10/10] gitignore: ignore a few newly generated files
2025-02-26 14:50 [PATCH v5 00/10] Update release.sh Andrey Albershteyn
` (8 preceding siblings ...)
2025-02-26 14:50 ` [PATCH v5 09/10] libxfs-apply: drop Cc: to stable release list Andrey Albershteyn
@ 2025-02-26 14:50 ` Andrey Albershteyn
9 siblings, 0 replies; 11+ messages in thread
From: Andrey Albershteyn @ 2025-02-26 14:50 UTC (permalink / raw)
To: linux-xfs; +Cc: Darrick J. Wong, Andrey Albershteyn
These files are generated from corresponding *.in templates.
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
.gitignore | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.gitignore b/.gitignore
index 756867124a021b195a10fc2a8a598f16aa6514c4..5d971200d5bfb285e680427de193f81d8ab77c06 100644
--- a/.gitignore
+++ b/.gitignore
@@ -65,12 +65,14 @@ cscope.*
/mdrestore/xfs_mdrestore
/mkfs/fstyp
/mkfs/mkfs.xfs
+/mkfs/xfs_protofile
/quota/xfs_quota
/repair/xfs_repair
/rtcp/xfs_rtcp
/spaceman/xfs_spaceman
/scrub/xfs_scrub
/scrub/xfs_scrub_all
+/scrub/xfs_scrub_all.timer
/scrub/xfs_scrub_fail
/scrub/*.cron
/scrub/*.service
--
2.47.2
^ permalink raw reply related [flat|nested] 11+ messages in thread