git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] archimport autodetects import status, supports incremental imports

From
MLMartin Langhoff <martin@catalyst.net.nz>
Date
Sep 4, 2005, 10:55 UTC
Message-ID
<1125831306901-git-send-email-martin@catalyst.net.nz>
If there is no GIT directory, archimport will assume it is an initial import.

It now also supports incremental imports, skipping "seen" commits. You can now run it repeatedly to pull new commits from the Arch repository.

Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
---
 git-archimport-script |   37 ++++++++++++++++++++-----------------
 1 files changed, 20 insertions(+), 17 deletions(-)
cc93bff516ed5f460f4d5b0eeb6157ede88d21c1
diff --git a/git-archimport-script b/git-archimport-script
--- a/git-archimport-script
+++ b/git-archimport-script
@@ -49,12 +49,12 @@ $SIG{'PIPE'}="IGNORE";
 $ENV{'TZ'}="UTC";
 
 our($opt_h,$opt_v, $opt_T,
-    $opt_C,$opt_t, $opt_i);
+    $opt_C,$opt_t);
 
 sub usage() {
     print STDERR <<END;
 Usage: ${\basename $0}     # fetch/update GIT from Arch
-       [ -h ] [ -v ] [ -i ] [ -T ] 
+       [ -h ] [ -v ] [ -T ] 
        [ -C GIT_repository ] [ -t tempdir ] 
        repository/arch-branch [ repository/arch-branch] ...
 END
@@ -173,21 +173,19 @@ foreach my $root (@arch_roots) {
 ## TODO cleanup irrelevant patches
 ##      and put an initial import
 ##      or a full tag
-
-if ($opt_i) {                   # initial import 
+my $import = 0;
+unless (-d '.git') { # initial import
     if ($psets[0]{type} eq 'i' || $psets[0]{type} eq 't') {
         print "Starting import from $psets[0]{id}\n";
+	`git-init-db`;
+	die $! if $?;
+	$import = 1;
     } else {
         die "Need to start from an import or a tag -- cannot use $psets[0]{id}";
     }
-    `git-init-db`;
-    die $! if $?;
 }
 
-# process
-my $lastbranch = branchname($psets[0]{id}); # only good for initial import
-my $importseen = $opt_i ? 0 : 1; # start at 1 if opt_i
-
+# process patchsets
 foreach my $ps (@psets) {
 
     $ps->{branch} =  branchname($ps->{id});
@@ -201,14 +199,22 @@ foreach my $ps (@psets) {
     }
     die $! if $?;
 
+    #
+    # skip commits already in repo
+    #
+    if (ptag($ps->{id})) {
+      $opt_v && print "Skipping already imported: $ps->{id}\n";
+      next;
+    }
+
     # 
     # create the branch if needed
     #
-    if ($ps->{type} eq 'i' && $importseen) {
-        die "Should not have more than one 'Initial import' per GIT import";
+    if ($ps->{type} eq 'i' && !$import) {
+        die "Should not have more than one 'Initial import' per GIT import: $ps->{id}";
     }
 
-    unless ($opt_i && !$importseen) { # skip for first commit
+    unless ($import) { # skip for import
         if ( -e ".git/refs/heads/$ps->{branch}") {
             # we know about this branch
             `git checkout    $ps->{branch}`;
@@ -225,13 +231,12 @@ foreach my $ps (@psets) {
         die $! if $?;
     } 
 
-        
     #
     # Apply the import/changeset/merge into the working tree
     # 
     if ($ps->{type} eq 'i' || $ps->{type} eq 't') {
-        $importseen = 1;
         apply_import($ps) or die $!;
+        $import=0;
     } elsif ($ps->{type} eq 's') {
         apply_cset($ps);
     }
@@ -577,8 +582,6 @@ sub ptag {
     } else {                    # read
         # if the tag isn't there, return 0
         unless ( -s ".git/archimport/tags/$tag") {
-            warn "Could not find tag $tag -- perhaps it isn't in the repos we have?\n" 
-                if $opt_v;
             return 0;
         }
         open(C,"<.git/archimport/tags/$tag")
Message 1 of 1 in “archimport autodetects import status, supports incremental imports”
  1. archimport autodetects import status, supports incremental importsMartin Langhoff, Sep 4, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.