forked from lix-project/hydra
* for git inputs, check latest revision of branch (defaults to master for now), if there is change, only use input if last checkout was > hour ago.
This commit is contained in:
parent
2b5ef66111
commit
06dc6d8f86
|
@ -223,15 +223,33 @@ sub fetchInputGit {
|
||||||
my $sha256;
|
my $sha256;
|
||||||
my $storePath;
|
my $storePath;
|
||||||
|
|
||||||
# Some simple caching: don't check a path more than once every N seconds.
|
my $branch = "master";
|
||||||
(my $cachedInput) = $db->resultset('CachedGitInputs')->search(
|
|
||||||
{uri => $uri, lastseen => {">", $timestamp - 3600}},
|
# First figure out the last-modified revision of the URI.
|
||||||
{rows => 1, order_by => "lastseen DESC"});
|
my $stdout; my $stderr;
|
||||||
|
(my $res, $stdout, $stderr) = captureStdoutStderr(
|
||||||
|
"git", "ls-remote", $uri, $branch);
|
||||||
|
die "Cannot get head revision of Git branch '$branch' at `$uri':\n$stderr" unless $res;
|
||||||
|
|
||||||
|
(my $revision, my $ref) = split ' ', $stdout;
|
||||||
|
die unless $revision =~ /^[0-9a-fA-F]+$/;
|
||||||
|
|
||||||
|
# Some simple caching: don't check a uri/branch more than once every hour, but prefer exact match on uri/branch/revision.
|
||||||
|
my $cachedInput ;
|
||||||
|
($cachedInput) = $db->resultset('CachedGitInputs')->search(
|
||||||
|
{uri => $uri, branch => $branch, revision => $revision},
|
||||||
|
{rows => 1});
|
||||||
|
if (! defined $cachedInput ) {
|
||||||
|
($cachedInput) = $db->resultset('CachedGitInputs')->search(
|
||||||
|
{uri => $uri, branch => $branch, lastseen => {">", $timestamp - 3600}},
|
||||||
|
{rows => 1, order_by => "lastseen DESC"});
|
||||||
|
}
|
||||||
|
|
||||||
if (defined $cachedInput && isValidPath($cachedInput->storepath)) {
|
if (defined $cachedInput && isValidPath($cachedInput->storepath)) {
|
||||||
$storePath = $cachedInput->storepath;
|
$storePath = $cachedInput->storepath;
|
||||||
$sha256 = $cachedInput->sha256hash;
|
$sha256 = $cachedInput->sha256hash;
|
||||||
$timestamp = $cachedInput->timestamp;
|
$timestamp = $cachedInput->timestamp;
|
||||||
|
$revision = $cachedInput->revision;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
# Then download this revision into the store.
|
# Then download this revision into the store.
|
||||||
|
@ -244,19 +262,20 @@ sub fetchInputGit {
|
||||||
# script. Thus, we leave `.git' in there.
|
# script. Thus, we leave `.git' in there.
|
||||||
$ENV{"NIX_PREFETCH_GIT_LEAVE_DOT_GIT"} = "1";
|
$ENV{"NIX_PREFETCH_GIT_LEAVE_DOT_GIT"} = "1";
|
||||||
|
|
||||||
my $stdout; my $stderr;
|
|
||||||
(my $res, $stdout, $stderr) = captureStdoutStderr(
|
(my $res, $stdout, $stderr) = captureStdoutStderr(
|
||||||
"nix-prefetch-git", $uri);
|
"nix-prefetch-git", $uri, $revision);
|
||||||
die "Cannot check out Git repository `$uri':\n$stderr" unless $res;
|
die "Cannot check out Git repository branch '$branch' at `$uri':\n$stderr" unless $res;
|
||||||
|
|
||||||
($sha256, $storePath) = split ' ', $stdout;
|
($sha256, $storePath) = split ' ', $stdout;
|
||||||
($cachedInput) = $db->resultset('CachedGitInputs')->search(
|
($cachedInput) = $db->resultset('CachedGitInputs')->search(
|
||||||
{uri => $uri, sha256hash => $sha256});
|
{uri => $uri, branch => $branch, sha256hash => $sha256});
|
||||||
|
|
||||||
if (!defined $cachedInput) {
|
if (!defined $cachedInput) {
|
||||||
txn_do($db, sub {
|
txn_do($db, sub {
|
||||||
$db->resultset('CachedGitInputs')->create(
|
$db->resultset('CachedGitInputs')->create(
|
||||||
{ uri => $uri
|
{ uri => $uri
|
||||||
|
, branch => $branch
|
||||||
|
, revision => $revision
|
||||||
, timestamp => $timestamp
|
, timestamp => $timestamp
|
||||||
, lastseen => $timestamp
|
, lastseen => $timestamp
|
||||||
, sha256hash => $sha256
|
, sha256hash => $sha256
|
||||||
|
@ -276,7 +295,7 @@ sub fetchInputGit {
|
||||||
, uri => $uri
|
, uri => $uri
|
||||||
, storePath => $storePath
|
, storePath => $storePath
|
||||||
, sha256hash => $sha256
|
, sha256hash => $sha256
|
||||||
, revision => strftime "%Y%m%d%H%M%S", gmtime($timestamp)
|
, revision => $revision
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,20 @@ __PACKAGE__->add_columns(
|
||||||
is_nullable => 0,
|
is_nullable => 0,
|
||||||
size => undef,
|
size => undef,
|
||||||
},
|
},
|
||||||
|
"branch",
|
||||||
|
{
|
||||||
|
data_type => "text",
|
||||||
|
default_value => undef,
|
||||||
|
is_nullable => 0,
|
||||||
|
size => undef,
|
||||||
|
},
|
||||||
|
"revision",
|
||||||
|
{
|
||||||
|
data_type => "text",
|
||||||
|
default_value => undef,
|
||||||
|
is_nullable => 0,
|
||||||
|
size => undef,
|
||||||
|
},
|
||||||
"timestamp",
|
"timestamp",
|
||||||
{
|
{
|
||||||
data_type => "integer",
|
data_type => "integer",
|
||||||
|
@ -47,11 +61,11 @@ __PACKAGE__->add_columns(
|
||||||
size => undef,
|
size => undef,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
__PACKAGE__->set_primary_key("uri", "sha256hash");
|
__PACKAGE__->set_primary_key("uri", "branch", "revision");
|
||||||
|
|
||||||
|
|
||||||
# Created by DBIx::Class::Schema::Loader v0.04999_09 @ 2009-11-17 16:04:13
|
# Created by DBIx::Class::Schema::Loader v0.04999_09 @ 2009-11-18 21:46:00
|
||||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:WzfB4qf6XqvIll/gPFZE6Q
|
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:K9P4pi33P54ZB8D/6WzAYw
|
||||||
|
|
||||||
|
|
||||||
# You can replace this text with custom content, and it will be preserved on regeneration
|
# You can replace this text with custom content, and it will be preserved on regeneration
|
||||||
|
|
|
@ -294,11 +294,13 @@ create table CachedSubversionInputs (
|
||||||
|
|
||||||
create table CachedGitInputs (
|
create table CachedGitInputs (
|
||||||
uri text not null,
|
uri text not null,
|
||||||
|
branch text not null,
|
||||||
|
revision text not null,
|
||||||
timestamp integer not null, -- when we first saw this hash
|
timestamp integer not null, -- when we first saw this hash
|
||||||
lastSeen integer not null, -- when we last saw this hash
|
lastSeen integer not null, -- when we last saw this hash
|
||||||
sha256hash text not null,
|
sha256hash text not null,
|
||||||
storePath text not null,
|
storePath text not null,
|
||||||
primary key (uri, sha256hash)
|
primary key (uri, branch, revision)
|
||||||
);
|
);
|
||||||
|
|
||||||
create table CachedCVSInputs (
|
create table CachedCVSInputs (
|
||||||
|
|
Loading…
Reference in a new issue