Author: eelco
Date: Wed Apr 27 15:34:33 2011
New Revision: 27005
URL: https://svn.nixos.org/websvn/nix/?rev=27005&sc=1
Log:
* Revert to the old (r10556) version of the nixos-checkout script. It
was never intended as a generic "check out anything" script; it's
just a convenience script to obtain the NixOS trunk after
installation. So that's what it should do.
Modified:
nixos/trunk/modules/installer/tools/nixos-checkout.nix
Modified: nixos/trunk/modules/installer/tools/nixos-checkout.nix
==============================================================================
--- nixos/trunk/modules/installer/tools/nixos-checkout.nix Wed Apr 27
15:17:50 2011 (r27004)
+++ nixos/trunk/modules/installer/tools/nixos-checkout.nix Wed Apr 27
15:34:33 2011 (r27005)
@@ -8,180 +8,33 @@
let
- options = {
-
- # !!! These option (and their implementation) seems
- # over-engineering. nixos-checkout was never intended to be a
- # generic, "check out anything that the user want to have from any
- # version management system whatsoever", but merely a trivial
- # convenience script to checkout the NixOS and Nixpkgs trees
- # during or after a NixOS installation.
- installer.repos.nixos = mkOption {
- default = [ { type = "svn"; } ];
- example =
- [ { type = "svn"; url =
"https://svn.nixos.org/repos/nix/nixos/branches/stdenv-updates"; target =
"/etc/nixos/nixos-stdenv-updates"; }
- { type = "git"; initialize = ''git clone git://mawercer.de/nixos
$target''; update = "git pull origin"; target = "/etc/nixos/nixos-git"; }
- ];
- description = ''
- The NixOS repository from which the system will be built.
- <command>nixos-checkout</command> will update all working
- copies of the given repositories,
- <command>nixos-rebuild</command> will use the first item
- which has the attribute <literal>default = true</literal>
- falling back to the first item. The type defines the
- repository tool added to the path. It also defines a "valid"
- repository. If the target directory already exists and it's
- not valid it will be moved to the backup location
- <filename><replaceable>dir</replaceable>-date</filename>.
- For svn the default target and repositories are
- <filename>/etc/nixos/nixos</filename> and
- <filename>https://svn.nixos.org/repos/nix/nixos/trunk</filename>.
- For git repositories update is called after initialization
- when the repo is initialized. The initialize code is run
- from working directory dirname
- <replaceable>target</replaceable> and should create the
- directory
- <filename><replaceable>dir</replaceable></filename>. For
- the executables used see <option>repoTypes</option>.
- '';
- };
-
- installer.repos.nixpkgs = mkOption {
- default = [ { type = "svn"; } ];
- description = "same as <option>repos.nixos</option>";
- };
-
- installer.repoTypes = mkOption {
- default = {
- svn = { valid = "[ -d .svn ]"; env = [ pkgs.coreutils pkgs.subversion
]; };
- git = { valid = "[ -d .git ]"; env = [ pkgs.coreutils pkgs.git
pkgs.gnused /* FIXME: use full path to sed in nix-pull */ ]; };
- gitsvn = { valid = "[ -d .git/svn ]"; env = [ pkgs.coreutils
pkgs.gitFull pkgs.gnused ]; };
- };
- description = ''
- Defines, for each supported version control system
- (e.g. <literal>git</literal>), the dependencies for the
- mechanism, as well as a test used to determine whether a
- directory is a checkout created by that version control
- system.
- '';
- };
-
- };
-
-
- ### implementation
-
- # prepareRepoAttrs adds svn defaults and preparse the repo attribute sets so
that they
- # returns in any case:
- # { type = git/svn;
- # target = path;
- # initialize = cmd; # must create target dir, dirname target will exist
- # update = cmd; # pwd will be target
- # default = true/false;
- # }
- prepareRepoAttrs = repo : attrs :
- assert (isAttrs attrs);
- assert (repo + "" == repo); # assert repo is a string
- if (! (attrs ? type)) then
- throw "repo type is missing of : ${showVal attrs}"
- # prepare svn repo
- else if attrs.type == "svn" then
- let a = { # add svn defaults
- url = "https://svn.nixos.org/repos/nix/${repo}/trunk";
- target = "/etc/nixos/${repo}";
- } // attrs; in
- rec {
- inherit (a) type target;
- default = if a ? default then a.default else false;
- initialize = "svn co ${a.url} ${a.target}";
- update = initialize; # co is just as fine as svn update
- }
- # prepare git repo
- else if attrs.type == "git" then # sanity check for existing attrs
- assert (all id (map ( attr : if hasAttr attr attrs then true
- else throw "git repository item is
missing attribute ${attr}")
- [ "target" "initialize" "update" ]
- ));
- let t = escapeShellArg attrs.target; in
- rec {
- inherit (attrs) type target;
- default = if attrs ? default then attrs.default else false;
- update = "cd ${t}; ${attrs.update}";
- initialize = ''
- cd $(dirname ${t}); ${attrs.initialize}
- [ -d ${t} ] || { echo "git initialize failed to create target directory
${t}"; exit 1; }
- ${update}'';
- }
- else if attrs.type == "gitsvn" then # sanity check for existing attrs
- let
- a = {
- # add gitsvn defaults
- url = "https://svn.nixos.org/repos/nix/${repo}";
- # XXX: same default target as svn: good/bad?
- target = "/etc/nixos/${repo}";
- initialize = "git svn clone -s ${a.url} ${a.target}";
- # splitting this in fetch and rebase -l helps to recover partly
cloned repo
- update = "git svn fetch && git svn rebase -l";
- } // attrs;
- t = escapeShellArg a.target;
- in
- rec {
- inherit (a) type target;
- default = if a ? default then a.default else false;
- update = "cd ${t} && ${a.update}";
- initialize = ''
- cd $(dirname ${t}) && ${a.initialize}
- [ -d ${t} ] || { echo "gitsvn initialize failed to create target
directory ${t}"; exit 1; }
- ${update}'';
- }
- else throw "unkown repo type ${attrs.type}";
-
- # apply prepareRepoAttrs on each repo definition
- repos = mapAttrs ( repo : list : map (x : (prepareRepoAttrs repo x) // {
inherit repo; } ) list ) config.installer.repos;
-
- # function returning the default repo (first one having attribute default or
head of list)
- defaultRepo = list : head ( (filter ( attrs : attrs ? default &&
attrs.default == true ) list)
- ++ list );
-
- # creates the nixos-checkout script
nixosCheckout = pkgs.substituteAll {
name = "nixos-checkout";
dir = "bin";
isExecutable = true;
- src = pkgs.writeScript "nixos-checkout" (''
- #! @shell@ -e
- # this file is automatically generated from nixos configuration file
settings (installer.repos)
- backupTimestamp=$(date "+%Y%m%d%H%M%S")
- '' + concatMapStrings ( attrs :
- let repoType = builtins.getAttr attrs.type
config.installer.repoTypes;
- target = escapeShellArg attrs.target; in
- ''
- # ${attrs.type} repo ${target}
- PATH=
- for path in ${toString repoType.env}; do
- PATH=$PATH:$path/bin:$path/sbin
- done
- if [ -d ${target} ] && { cd ${target} && { ${
repoType.valid}; }; }; then
- echo; echo '>> ' updating ${attrs.type} repo ${target}
- set -x; ${attrs.update}; set +x
- else # [ make backup and ] initialize
- [ -e ${target} ] && mv ${target}
${target}-$backupTimestamp
- target=${target}
- [ -d "$(dirname ${target})" ] || mkdir -p "$(dirname
${target})"
- echo; echo '>> 'initializing ${attrs.type} repo
${target}
- set -x; ${attrs.initialize}; set +x
- fi
- ''
- ) # flatten all repo definition to one list adding the repository
- ( concatLists (flattenAttrs repos) )
- );
+ src = pkgs.writeScript "nixos-checkout"
+ ''
+ cd /etc/nixos
+
+ # Move any old nixos or nixpkgs directories out of the way.
+ backupTimestamp=$(date "+%Y%m%d%H%M%S")
+
+ if test -e nixos -a ! -e nixos/.svn; then
+ mv nixos nixos-$backupTimestamp
+ fi
+
+ if test -e nixpkgs -a ! -e nixpkgs/.svn; then
+ mv nixpkgs nixpkgs-$backupTimestamp
+ fi
+
+ # Check out the NixOS and Nixpkgs sources.
+ svn co https://svn.nixos.org/repos/nix/nixos/trunk nixos
+ svn co https://svn.nixos.org/repos/nix/nixpkgs/trunk nixpkgs
+ '';
};
-
in
{
- require = options;
-
- environment.systemPackages = [nixosCheckout];
+ environment.systemPackages = [ nixosCheckout ];
}
_______________________________________________
nix-commits mailing list
[email protected]
http://mail.cs.uu.nl/mailman/listinfo/nix-commits