forked from lix-project/lix
* Add missing files to dist.
* Fix GC and substitute bugs related to self-references. Add a regression test.
This commit is contained in:
parent
32fa82a56a
commit
06b4424286
|
@ -1329,7 +1329,8 @@ void SubstitutionGoal::init()
|
||||||
|
|
||||||
for (PathSet::iterator i = references.begin();
|
for (PathSet::iterator i = references.begin();
|
||||||
i != references.end(); ++i)
|
i != references.end(); ++i)
|
||||||
addWaitee(worker.makeSubstitutionGoal(*i));
|
if (*i != storePath) /* ignore self-references */
|
||||||
|
addWaitee(worker.makeSubstitutionGoal(*i));
|
||||||
|
|
||||||
if (waitees.empty()) /* to prevent hang (no wake-up event) */
|
if (waitees.empty()) /* to prevent hang (no wake-up event) */
|
||||||
referencesValid();
|
referencesValid();
|
||||||
|
@ -1347,7 +1348,8 @@ void SubstitutionGoal::referencesValid()
|
||||||
|
|
||||||
for (PathSet::iterator i = references.begin();
|
for (PathSet::iterator i = references.begin();
|
||||||
i != references.end(); ++i)
|
i != references.end(); ++i)
|
||||||
assert(isValidPath(*i));
|
if (*i != storePath) /* ignore self-references */
|
||||||
|
assert(isValidPath(*i));
|
||||||
|
|
||||||
tryNext();
|
tryNext();
|
||||||
}
|
}
|
||||||
|
|
|
@ -553,7 +553,10 @@ void deleteFromStore(const Path & _path)
|
||||||
|
|
||||||
Transaction txn(nixDB);
|
Transaction txn(nixDB);
|
||||||
if (isValidPathTxn(txn, path)) {
|
if (isValidPathTxn(txn, path)) {
|
||||||
if (getReferers(txn, path).size() > 0)
|
PathSet referers = getReferers(txn, path);
|
||||||
|
if (referers.size() > 1 ||
|
||||||
|
(referers.size() == 1 &&
|
||||||
|
*referers.begin() != path))
|
||||||
throw Error(format("cannot delete path `%1%' because it is in use") % path);
|
throw Error(format("cannot delete path `%1%' because it is in use") % path);
|
||||||
invalidatePath(path, txn);
|
invalidatePath(path, txn);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ gc-concurrent.sh: gc-concurrent.nix gc-concurrent2.nix
|
||||||
TESTS = init.sh hash.sh lang.sh simple.sh dependencies.sh locking.sh parallel.sh \
|
TESTS = init.sh hash.sh lang.sh simple.sh dependencies.sh locking.sh parallel.sh \
|
||||||
build-hook.sh substitutes.sh substitutes2.sh fallback.sh nix-push.sh gc.sh \
|
build-hook.sh substitutes.sh substitutes2.sh fallback.sh nix-push.sh gc.sh \
|
||||||
gc-concurrent.sh verify.sh nix-pull.sh
|
gc-concurrent.sh verify.sh nix-pull.sh
|
||||||
#TESTS = init.sh gc-concurrent.sh
|
#TESTS = init.sh nix-push.sh nix-pull.sh
|
||||||
|
|
||||||
XFAIL_TESTS =
|
XFAIL_TESTS =
|
||||||
|
|
||||||
|
@ -57,5 +57,6 @@ EXTRA_DIST = $(TESTS) \
|
||||||
substitutes.nix.in substituter.sh \
|
substitutes.nix.in substituter.sh \
|
||||||
substitutes2.nix.in substituter2.sh \
|
substitutes2.nix.in substituter2.sh \
|
||||||
gc-concurrent.nix.in gc-concurrent.builder.sh \
|
gc-concurrent.nix.in gc-concurrent.builder.sh \
|
||||||
|
gc-concurrent2.nix.in gc-concurrent2.builder.sh \
|
||||||
fallback.nix.in \
|
fallback.nix.in \
|
||||||
$(wildcard lang/*.nix) $(wildcard lang/*.exp)
|
$(wildcard lang/*.nix) $(wildcard lang/*.exp)
|
||||||
|
|
|
@ -3,4 +3,7 @@ export PATH=/bin:/usr/bin:$PATH
|
||||||
mkdir $out
|
mkdir $out
|
||||||
echo $(cat $input1/foo)$(cat $input2/bar) > $out/foobar
|
echo $(cat $input1/foo)$(cat $input2/bar) > $out/foobar
|
||||||
|
|
||||||
ln -s $input2 $out/input-2
|
ln -s $input2 $out/input-2
|
||||||
|
|
||||||
|
# Self-reference.
|
||||||
|
ln -s $out $out/self
|
||||||
|
|
Loading…
Reference in a new issue