[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[SCM] Debian package checker branch, master, updated. 2.5.1-84-geb1c186



The following commit has been merged in the master branch:
commit 00ec3102fffee6c7e98b392b074c17f743c85726
Author: Niels Thykier <niels@thykier.net>
Date:   Tue Jul 12 01:24:42 2011 +0200

    Moved handling of collect status into Lab::Package
    
    This was a "simple" code relocation; for now the new methods are
    "not-public" (but with frontend/lintian using them).

diff --git a/frontend/lintian b/frontend/lintian
index f62536a..32cb8dc 100755
--- a/frontend/lintian
+++ b/frontend/lintian
@@ -1484,21 +1484,13 @@ sub unpack_group {
 		    next;
 		}
 
-		# If a file named .SCRIPT-VERSION already exists, we've already
-		# collected this information and we can skip it.  Otherwise,
-		# remove any .SCRIPT-* files (which are old version information).
-		if (-f "$base/.${coll}-$ci->{'version'}") {
+		# check if it has been run previously
+		if ($lpkg->_is_coll_finished($coll, $ci->{'version'})) {
 		    $collmap->satisfy($req);
 		    next;
 		}
-		opendir(BASE, $base)
-		    or fail("cannot read directory $base: $!");
-		for my $file (readdir BASE) {
-		    if ($file =~ /^\.\Q$coll-/) {
-			unlink("$base/$file");
-		    }
-		}
-		closedir(BASE);
+		# Not run before (or out of date)
+		$lpkg->_clear_coll_status($coll);
 
 		# collect info
 		$collmap->select($req);
@@ -1523,11 +1515,8 @@ sub unpack_group {
 		delete $running_jobs{$coll};
 		if ($cmd->status() == 0) {
 		    my $ci = $collection_info{$coll};
-		    open(VERSION, '>', "$base/.${coll}-$ci->{'version'}")
-			or fail("cannot create $base/.${coll}-$ci->{'version'}: $!");
-		    print VERSION "Lintian-Version: $LINTIAN_VERSION\n"
-			. 'Timestamp: ' . time . "\n";
-		    close(VERSION);
+		    $lpkg->_mark_coll_finished($coll, $ci->{'version'})
+			or fail("cannot mark $coll for complete: $!");
 		    debug_msg(1, "Collection script $coll done");
 		} else {
 		    warning("collect info $coll about package $pkg_name failed");
diff --git a/lib/Lab/Package.pm b/lib/Lab/Package.pm
index b7c881a..f4ac509 100644
--- a/lib/Lab/Package.pm
+++ b/lib/Lab/Package.pm
@@ -227,6 +227,58 @@ sub create_entry(){
     return 1;
 }
 
+# $lpkg->_mark_coll_finished($name, $version)
+#
+#  Record that the collection $name (at version) has been run on this
+#  entry.
+#
+#  returns a truth value on success; otherwise $! will contain the error
+#
+#  This is used by frontend/lintian, but probably should not be.
+sub _mark_coll_finished {
+    my ($self, $collname, $collver) = @_;
+    # In the "old days" we would also write the Lintian version and the time
+    # stamp in these files, but since we never read them it seems like overkill.
+    #  - for the timestamp we could use the mtime of the file anyway
+    return touch_file "$self->{base_dir}/.$collname-$collver";
+}
+
+# $lpkg->_is_coll_finished($name, $version)
+#
+#  returns a truth value if a collection with $name at $version has been
+#  marked as completed.
+#
+#  This is used by frontend/lintian, but probably should not be.
+sub _is_coll_finished {
+    my ($self, $collname, $collver) = @_;
+    return -e "$self->{base_dir}/.$collname-$collver";
+}
+
+# $lpkg->_clear_coll_status($name)
+#
+#  Removes all completation status for collection $name.
+#
+#  Returns a truth value on success; otherwise $! will contain the error
+#
+#  This is used by frontend/lintian, but probably should not be.
+sub _clear_coll_status {
+    my ($self, $collname) = @_;
+    my $ok = 1;
+    my $serr;
+    opendir my $d, $self->{base_dir} or return 0;
+    foreach my $file (readdir $d) {
+	next unless $file =~ m,^\.$collname-\d++$,;
+	unless (unlink "$d/$file") {
+	    # store the first error
+	    next unless $ok;
+	    $serr = $!;
+	    $ok = 0;
+	}
+    }
+    closedir $d or return 0;
+    $! = $serr unless $ok;
+    return $ok;
+}
 
 sub update_status_file{
     my ($self, $lint_version) = @_;

-- 
Debian package checker


Reply to: