From: Jason Riedy <ejr@EECS.Berkeley.EDU>
To: git@vger.kernel.org
Subject: [PATCH 2/3] Use File::Find rather than find and xargs in git-archimport
Date: Fri, 10 Feb 2006 15:35:57 -0800 [thread overview]
Message-ID: <1103.1139614557@lotus.CS.Berkeley.EDU> (raw)
git-archimport uses find and xargs directly to find and apply patches.
Replace these by File::Find and save one call to find. Tested on
Solaris 8 with a moderately complex, interrelated set of Arch repos.
Signed-off-by: Jason Riedy <ejr@cs.berkeley.edu>
---
git-archimport.perl | 34 ++++++++++++++++++++++++----------
1 files changed, 24 insertions(+), 10 deletions(-)
5cd391ce78022806bbe12d5fda5ff49843e53207
diff --git a/git-archimport.perl b/git-archimport.perl
index 841738d..17502a4 100755
--- a/git-archimport.perl
+++ b/git-archimport.perl
@@ -60,6 +60,7 @@ use Getopt::Std;
use File::Temp qw(tempdir);
use File::Path qw(mkpath rmtree);
use File::Basename qw(basename dirname);
+use File::Find;
use Data::Dumper qw/ Dumper /;
use IPC::Open2;
@@ -664,17 +665,30 @@ sub apply_cset {
# get the changeset
safe_pipe_capture($TLA,'get-changeset',$ps->{id},"$tmp/changeset");
die "Cannot get changeset: $!" if $?;
-
+
+ my @patchlist;
+ my $wanted_patches = sub {
+ # We want all those non-empty *.patch files that do not modify
+ # arch state.
+ if (-f && !-z && /^.*\.patch$/ && !/{arch}/) {
+ push @patchlist, $File::Find::name;
+ }
+ }; # perl note: This needs to be an anonymous sub to share
+ # @patchlist correctly.
+
# apply patches
- if (`find $tmp/changeset/patches -type f -name '*.patch'`) {
- # this can be sped up considerably by doing
- # (find | xargs cat) | patch
- # but that cna get mucked up by patches
- # with missing trailing newlines or the standard
- # 'missing newline' flag in the patch - possibly
- # produced with an old/buggy diff.
- # slow and safe, we invoke patch once per patchfile
- `find $tmp/changeset/patches -type f -name '*.patch' -print0 | grep -zv '{arch}' | xargs -iFILE -0 --no-run-if-empty patch -p1 --forward -iFILE`;
+
+ # this can be sped up considerably by applying all the patches in
+ # one pass, as with
+ # (find | xargs cat) | patch
+ # but that can get mucked up by patches with missing trailing
+ # newlines or the standard 'missing newline' flag in the patch -
+ # possibly produced with an old/buggy diff.
+ # slow and safe, we invoke patch once per patchfile
+
+ File::Find ($wanted_patches, $tmp . "/changeset/patches");
+ foreach my $patchname (@patchlist) {
+ safe_pipe_capture("patch", "-p1", "--forward", "-i", $patchname);
die "Problem applying patches! $!" if $?;
}
--
1.1.6.g0d39d
next reply other threads:[~2006-02-10 23:36 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-10 23:35 Jason Riedy [this message]
2006-02-10 23:47 ` [PATCH 2/3] Use File::Find rather than find and xargs in git-archimport Randal L. Schwartz
2006-02-11 0:17 ` Jason Riedy
-- strict thread matches above, loose matches on Subject: below --
2006-02-11 2:52 Jason Riedy
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=1103.1139614557@lotus.CS.Berkeley.EDU \
--to=ejr@eecs.berkeley.edu \
--cc=git@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.