From: Bert Wesarg <bert.wesarg@googlemail.com>
To: Petr Baudis <pasky@suse.cz>
Cc: Bert Wesarg <bert.wesarg@googlemail.com>, git@vger.kernel.org
Subject: [TopGit PATCH 2/2] tg-import.sh: A dump quilt queue importer
Date: Fri, 8 Aug 2008 20:19:48 +0200 [thread overview]
Message-ID: <1218219588-6849-2-git-send-email-bert.wesarg@googlemail.com> (raw)
In-Reply-To: <1218219588-6849-1-git-send-email-bert.wesarg@googlemail.com>
A simple, non smart, quilt importer.
Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
---
.gitignore | 2 +
Makefile | 3 +-
README | 15 ++++++++
tg-import.sh | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 134 insertions(+), 1 deletions(-)
diff --git a/.gitignore b/.gitignore
index 6f0727f..5f1831b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@ tg-create
tg-create.txt
tg-delete
tg-delete.txt
+tg-import
+tg-import.txt
tg-info
tg-info.txt
tg-patch
diff --git a/Makefile b/Makefile
index dba5f20..671beab 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,8 @@ sharedir = $(PREFIX)/share/topgit
hooksdir = $(cmddir)/hooks
-commands_in = tg-create.sh tg-delete.sh tg-info.sh tg-patch.sh tg-summary.sh tg-update.sh
+commands_in = tg-create.sh tg-delete.sh tg-info.sh tg-patch.sh tg-summary.sh \
+ tg-update.sh tg-import.sh
hooks_in = hooks/pre-commit.sh
commands_out = $(patsubst %.sh,%,$(commands_in))
diff --git a/README b/README
index dc0045f..3fc6d18 100644
--- a/README
+++ b/README
@@ -275,6 +275,21 @@ tg update
TODO: tg update -a for updating all topic branches
+tg import
+~~~~~~~~~
+ Import a quilt queue into TopGit. First argument is the series
+ file from quilt. Second is the prefix for the topic names
+ (i.e. "t/"). All remaining arguments are the dependencies for
+ the first patch in the series. Use '-s' if you want to strip
+ common patch suffixes from the patch file name (like .diff and
+ .patch).
+
+ TODO: be smart (merge conflicts, patch rejects, ...)
+ TODO: be interactive, let the user edit .topmsg for first commit
+ TODO: be resumable
+ TODO: use a dependency file, for creating non linear dependencies
+ of the patches (maybe generated from quilt graph)
+
TODO: Some infrastructure for sharing topic branches between
repositories easily
TODO: tg depend for adding/removing dependencies smoothly
diff --git a/tg-import.sh b/tg-import.sh
new file mode 100644
index 0000000..f9403b9
--- /dev/null
+++ b/tg-import.sh
@@ -0,0 +1,115 @@
+#!/bin/sh
+# TopGit - A different patch queue manager
+# (c) Petr Baudis <pasky@suse.cz> 2008
+# (c) Bert Wesarg <Bert.Wesarg@googlemail.com> 2008
+# GPLv2
+
+series= # series file of patch queue
+prefix= # prefix for branch names (i.e. "t/")
+strip_suffixes= # strip suffixes like .{diff,patch}
+
+## Parse options
+
+while [ -n "$1" ]; do
+ arg="$1"
+ case "$arg" in
+ -s)
+ strip_suffixes=1
+ shift;;
+ -*)
+ echo "Usage: tg import [-s] SERIES PREFIX [DEPS...]" >&2
+ exit 1;;
+ *)
+ break;;
+ esac
+done
+
+series="$1"
+prefix="$2"
+shift 2
+# remaining args in "$@" are deps for first patch
+
+# check series file for existens and reading
+[ -r "$series" ] ||
+ die "can't read series file '$series'"
+
+# get dir of series file
+dir="$(dirname "$series")" ||
+ die "can't parse dir of series file '$series'"
+
+# These two functions are from quilt, and we can use more from there
+patch_header()
+{
+ awk '
+ /^(---|\*\*\*|Index:)[ \t][^ \t]|^diff -/ \
+ { exit }
+ { print }
+ '
+}
+
+strip_diffstat()
+{
+ awk '
+ /#? .* \| / \
+ { eat = eat $0 "\n"
+ next }
+ /^#? .* files? changed(, .* insertions?\(\+\))?(, .* deletions?\(-\))?/ \
+ { eat = ""
+ next }
+ { print eat $0
+ eat = "" }
+ '
+}
+
+# escape $root_dir for sed expression
+root_dir_esc="$(echo "$root_dir" | sed -e 's/\//\\\\\//g')"
+
+cat "$series" |
+ sed -e 's/#.*//' \ # remove any comments
+ -e 's/^[ \t]*//' \ # remove leading whitespace
+ -e 's/[ \t].*//' | # remove all after none leading whitespace
+ sed -e '/^$/d' | # remove empty lines
+ while read patch; do
+
+ patchfile="$dir/$patch"
+ [ -r "$patchfile" ] ||
+ die "can't access patch file for '$patch'"
+
+ # strip suffixes
+ name="$patch"
+ [ -n "$strip_suffixes" ] && {
+ name="${name%.patch}"
+ name="${name%.diff}"
+ }
+
+ # for the first patch "$@" are the deps from the command line
+ # all others get zero deps
+ tg create "${prefix}${name}" "$@"
+
+ # apply patch
+ # be stupid, hard coded -p1
+ # currently no support for compressed patch files
+ patch -p1 -d "$root_dir" < "$patchfile"
+
+ # extract header from patch file and feed it into .topmsg
+ # TODO: extract mail headers
+ cat "$patchfile" |
+ patch_header |
+ strip_diffstat |
+ make_topmsg "$name" > "$root_dir/.topmsg"
+ # overwrite .topmsg from tg create in index
+ git add "$root_dir/.topmsg"
+
+ # add all modified files from patch to index
+ # (and prepending it with $root_dir)
+ # be stupid, hard coded -p1 --strip=1
+ lsdiff --strip=1 "$patchfile" |
+ sed -e "s/^/$root_dir_esc\//" |
+ xargs git add
+
+ # commit changes to git
+ git commit -m "import of quilt patch '$patch'"
+
+ # clean deps after first create
+ set --
+ done
--
tg: (63c1934..) t/tg-import (depends on: t/auto-generate-command-list-for-tg.sh t/check-read-permissions-of-help-files t/mkdir-bindir t/make-.topmsg-gen-a-function t/its-info-attributes)
next prev parent reply other threads:[~2008-08-08 18:21 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-08 18:19 [TopGit PATCH 1/2] Factor out the template generation for the .topmsg file Bert Wesarg
2008-08-08 18:19 ` Bert Wesarg [this message]
2008-08-09 0:57 ` [TopGit PATCH 2/2] tg-import.sh: A dump quilt queue importer Petr Baudis
2008-08-09 7:56 ` Bert Wesarg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1218219588-6849-2-git-send-email-bert.wesarg@googlemail.com \
--to=bert.wesarg@googlemail.com \
--cc=git@vger.kernel.org \
--cc=pasky@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).