git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] contrib/fast-import: add perl version of simple example
@ 2007-09-18  7:26 Jeff King
  2007-09-18  7:27 ` Jeff King
  2007-09-18 10:16 ` Johannes Schindelin
  0 siblings, 2 replies; 11+ messages in thread
From: Jeff King @ 2007-09-18  7:26 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Shawn O. Pearce

This is based on the git-import.sh script, but is a little
more robust and efficient. More importantly, it should
serve as a quick template for interfacing fast-import with
perl scripts.

Signed-off-by: Jeff King <peff@peff.net>
---
 contrib/fast-import/git-import.perl |   64 +++++++++++++++++++++++++++++++++++
 1 files changed, 64 insertions(+), 0 deletions(-)
 create mode 100755 contrib/fast-import/git-import.perl

diff --git a/contrib/fast-import/git-import.perl b/contrib/fast-import/git-import.perl
new file mode 100755
index 0000000..f9fef6d
--- /dev/null
+++ b/contrib/fast-import/git-import.perl
@@ -0,0 +1,64 @@
+#!/usr/bin/perl
+#
+# Performs an initial import of a directory. This is the equivalent
+# of doing 'git init; git add .; git commit'. It's a little slower,
+# but is meant to be a simple fast-import example.
+
+use strict;
+use File::Find;
+
+my $USAGE = 'Usage: git-import branch import-message';
+my $branch = shift or die "$USAGE\n";
+my $message = shift or die "$USAGE\n";
+
+chomp(my $username = `git config user.name`);
+chomp(my $email = `git config user.email`);
+die 'You need to set user name and email'
+  unless $username && $email;
+
+system('git init');
+open(my $fi, '|-', qw(git fast-import --date-format=now))
+  or die "unable to spawn fast-import: $!";
+
+print $fi <<EOF;
+commit refs/heads/$branch
+committer $username <$email> now
+data <<MSGEOF
+$message
+MSGEOF
+
+EOF
+
+find(
+  sub {
+    if($File::Find::name eq './.git') {
+      $File::Find::prune = 1;
+      return;
+    }
+    return unless -f $_;
+
+    my $fn = $File::Find::name;
+    $fn =~ s#^.\/##;
+
+    open(my $in, '<', $_)
+      or die "unable to open $fn: $!";
+    my @st = stat($in)
+      or die "unable to stat $fn: $!";
+    my $len = $st[7];
+
+    print $fi "M 644 inline $fn\n";
+    print $fi "data $len\n";
+    while($len > 0) {
+      my $r = read($in, my $buf, $len < 4096 ? $len : 4096);
+      defined($r) or die "read error from $fn: $!";
+      $r > 0 or die "premature EOF from $fn: $!";
+      print $fi $buf;
+      $len -= $r;
+    }
+    print $fi "\n";
+
+  }, '.'
+);
+
+close($fi);
+exit $?;
-- 
1.5.3.1.967.g6bb01

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2007-09-18 13:24 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-09-18  7:26 [PATCH] contrib/fast-import: add perl version of simple example Jeff King
2007-09-18  7:27 ` Jeff King
2007-09-18 10:16 ` Johannes Schindelin
2007-09-18 10:28   ` Andreas Ericsson
2007-09-18 10:30     ` Jeff King
2007-09-18 11:18       ` Johannes Schindelin
2007-09-18 11:28         ` Andreas Ericsson
2007-09-18 11:57         ` Sam Vilain
2007-09-18 12:36           ` Johannes Schindelin
2007-09-18 13:25             ` Sam Vilain
2007-09-18 11:17     ` Johannes Schindelin

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).