guix-register: Allow the initial directory creation to proceed.

This fixes a bug whereby 'guix-register' would bail out when trying to
create NIX_STORE_DIR/.links when NIX_STORE_DIR is read-only.

* nix/guix-register/guix-register.cc (parse_opt): Initialize
  'settings.nixStore' to PREFIX + NIX_STORE_DIR.
  (main): Change 'settings.nixStore' once the 'LocalStore' has been
  instantiated.
This commit is contained in:
Ludovic Courtès 2013-09-24 22:33:02 +02:00
parent 9d3c4daed3
commit 923206f79b
1 changed files with 9 additions and 1 deletions

View File

@ -75,7 +75,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
case 'p': case 'p':
{ {
prefix = canonPath (arg); prefix = canonPath (arg);
settings.nixStore = NIX_STORE_DIR; settings.nixStore = prefix + NIX_STORE_DIR;
settings.nixDataDir = prefix + NIX_DATA_DIR; settings.nixDataDir = prefix + NIX_DATA_DIR;
settings.nixLogDir = prefix + NIX_LOG_DIR; settings.nixLogDir = prefix + NIX_LOG_DIR;
settings.nixStateDir = prefix + NIX_STATE_DIR; settings.nixStateDir = prefix + NIX_STATE_DIR;
@ -169,7 +169,15 @@ main (int argc, char *argv[])
{ {
argp_parse (&argp, argc, argv, 0, 0, 0); argp_parse (&argp, argc, argv, 0, 0, 0);
/* Instantiate the store. This creates any missing directories among
'settings.nixStore', 'settings.nixDBPath', etc. */
LocalStore store; LocalStore store;
/* Under the --prefix tree, the final name of the store will be
NIX_STORE_DIR. Set it here so that the database uses file names
prefixed by NIX_STORE_DIR and not PREFIX + NIX_STORE_DIR. */
settings.nixStore = NIX_STORE_DIR;
register_validity (&store, *input); register_validity (&store, *input);
} }
catch (std::exception &e) catch (std::exception &e)