fetchgit: allow using dirty local work trees

This commit is contained in:
tv 2015-06-28 15:04:45 +02:00
parent 3ca8eec45c
commit 2e6221e095
4 changed files with 35 additions and 13 deletions

View File

@ -1,14 +1,27 @@
#! /bin/sh
#
# usage: fetchgit git_rev git_url out_link
# usage: fetchgit repo_name out_link
#
# Clone the specified Git repository and make it available as out_link.
# Make the specified repository available as out_link.
#
set -euf
git_rev=$1
git_url=$2
out_link=$3
repo_name=$1
out_link=$2
if test "$repo_name" != nixpkgs; then
echo "fetchgit: cannot fetch $repo_name, yet" >&2
exit -1
fi
git_rev=$(nixos-query nixpkgs.rev)
git_url=$(nixos-query nixpkgs.url)
dirty=$(nixos-query nixpkgs.dirty)
case $dirty in true)
ln -snf "$git_url" "$out_link"
exit
esac
# Put all bases in the same place as out_link.
# Notice how out_link must not clash with cache_dir and work_dir.
@ -39,7 +52,8 @@ is_up_to_date() {
test "$(work_git rev-parse --verify HEAD)" = "$git_rev"
}
# Notice how the remote name "origin" has been chosen arbitrarily.
# Notice how the remote name "origin" has been chosen arbitrarily, but must be
# kept in sync with the default value of nixpkgs.rev.
if ! is_up_to_date; then
if ! test -d "$cache_dir"; then
mkdir -p "$cache_dir"

View File

@ -21,10 +21,7 @@ secrets_rsync=$secrets_root/$host/rsync
NIX_PATH=$NIX_PATH:secrets=$secrets_nix
export NIX_PATH
rev=$(nixos-query nixpkgs.rev)
url=$(nixos-query nixpkgs.url)
fetchgit "$rev" "$url" tmp/nixpkgs/$host
fetchgit nixpkgs tmp/nixpkgs/$host
)
nix-build \

View File

@ -14,10 +14,12 @@ systemname=$2
NIX_PATH=$NIX_PATH:secrets=$PWD/secrets/$systemname/nix
export NIX_PATH
rev=$(nixos-query nixpkgs.rev)
url=$(nixos-query nixpkgs.url)
case $(nixos-query nixpkgs.dirty) in true)
echo "$0: cannot use nixpkgs.dirty" >&2 # b/c ./cac pushconfig
exit -1
esac
fetchgit "$rev" "$url" tmp/nixpkgs/$systemname
fetchgit nixpkgs tmp/nixpkgs/$systemname
)
./cac poll 10s 2>/dev/null &

View File

@ -10,7 +10,16 @@ with lib;
};
nixpkgs.rev = mkOption {
type = types.str;
default = "origin/master";
description = "Revision of the remote repository.";
};
nixpkgs.dirty = mkOption {
type = types.bool;
default = false;
description = ''
If nixpkgs.url is a local path, then use that as it is.
TODO this break if URL is not a local path.
'';
};
};
}