On Fri, Aug 08, 2008 at 08:19:48PM +0200, Bert Wesarg wrote: > A simple, non smart, quilt importer. > > Signed-off-by: Bert Wesarg <bert.wesarg@xxxxxxxxxxxxxx> > > --- > .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. Sensible usage, but I'm not happy with making tg import quilt-only; what if we will say want to import to topgit from existing branches, or from StGIT or something else? The command name is good, but maybe I'd add a required --quilt switch. After all, this is not a command you run three times a day by hand. > + Use '-s' if you want to strip > + common patch suffixes from the patch file name (like .diff and > + .patch). When *wouldn't* we want to do this? Doesn't it make sense to make this the default? > diff --git a/tg-import.sh b/tg-import.sh > new file mode 100644 > index 0000000..f9403b9 > --- /dev/null > +++ b/tg-import.sh I think the functionality is good to have, but you are also reinventing the wheel here. Git can already import quilt series by git-quiltimport. So what about a more general approach? * Build tg-import so that it primarily just imports given set of existing commits. * Then, StGIT and Quilt importers are trivial extensions? > + # strip suffixes > + name="$patch" > + [ -n "$strip_suffixes" ] && { > + name="${name%.patch}" > + name="${name%.diff}" > + } I think in these cases, it's better style to use plain if. > + # 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 lsdiff? I don't have this tool. And this won't work with file removals properly anyway. I guess git add -u is too new for us, so you might opt for this snippet I've used in git-filter-branch: ( git diff-index -r --name-only HEAD git ls-files --others ) | git update-index --add --replace --remove --stdin Or even better, use git apply? -- Petr "Pasky" Baudis The next generation of interesting software will be done on the Macintosh, not the IBM PC. -- Bill Gates -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html