Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 0 additions & 14 deletions src/libfetchers/fetchers.cc
Original file line number Diff line number Diff line change
Expand Up @@ -269,24 +269,10 @@ void Input::checkLocks(Input specified, Input & result)
}
}

if (auto prevLastModified = specified.getLastModified()) {
if (result.getLastModified() != prevLastModified)
throw Error(
"'lastModified' attribute mismatch in input '%s', expected %d, got %d",
result.to_string(),
*prevLastModified,
result.getLastModified().value_or(-1));
}

if (auto prevRev = specified.getRev()) {
if (result.getRev() != prevRev)
throw Error("'rev' attribute mismatch in input '%s', expected %s", result.to_string(), prevRev->gitRev());
}

if (auto prevRevCount = specified.getRevCount()) {
if (result.getRevCount() != prevRevCount)
throw Error("'revCount' attribute mismatch in input '%s', expected %d", result.to_string(), *prevRevCount);
}
}

std::pair<ref<SourceAccessor>, Input> Input::getAccessor(const Settings & settings, Store & store) const
Expand Down
15 changes: 11 additions & 4 deletions src/libfetchers/git.cc
Original file line number Diff line number Diff line change
Expand Up @@ -889,10 +889,17 @@ struct GitInputScheme : InputScheme

auto rev = *input.getRev();

input.attrs.insert_or_assign("lastModified", getLastModified(settings, repoInfo, repoDir, rev));

if (!getShallowAttr(input))
input.attrs.insert_or_assign("revCount", getRevCount(settings, repoInfo, repoDir, rev));
/* Skip lastModified computation if it's already supplied by the caller.
We don't care if they specify an incorrect value; it doesn't
matter for security, unlike narHash. */
if (!input.attrs.contains("lastModified"))
input.attrs.insert_or_assign("lastModified", getLastModified(settings, repoInfo, repoDir, rev));

if (!getShallowAttr(input)) {
/* Like lastModified, skip revCount if supplied by the caller. */
if (!input.attrs.contains("revCount"))
input.attrs.insert_or_assign("revCount", getRevCount(settings, repoInfo, repoDir, rev));
}

printTalkative("using revision %s of repo '%s'", rev.gitRev(), repoInfo.locationToArg());

Expand Down
1 change: 1 addition & 0 deletions tests/nixos/content-encoding.nix
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ in
start_all()

machine.wait_for_unit("nginx.service")
machine.wait_for_open_port(80)

# Original test: zstd archive with gzip content-encoding
# Make sure that the file is properly compressed as the test would be meaningless otherwise
Expand Down
1 change: 0 additions & 1 deletion tests/nixos/tarball-flakes.nix
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,6 @@ in
# Check that fetching fails if we provide incorrect attributes.
machine.fail("nix flake metadata --json http://localhost/tags/latest.tar.gz?rev=493300eb13ae6fb387fbd47bf54a85915acc31c0")
machine.fail("nix flake metadata --json http://localhost/tags/latest.tar.gz?revCount=789")
machine.fail("nix flake metadata --json http://localhost/tags/latest.tar.gz?narHash=sha256-tbudgBSg+bHWHiHnlteNzN8TUvI80ygS9IULh4rklEw=")
'';

Expand Down
Loading