|
@@ -75,7 +75,17 @@ namespace Usm {
|
|
|
public CachedPackage resolve_installed(CachedPackage installed) throws Error {
|
|
public CachedPackage resolve_installed(CachedPackage installed) throws Error {
|
|
|
var info = File.new_for_path(installed.state_path).query_info(FileAttribute.STANDARD_SYMLINK_TARGET, FileQueryInfoFlags.NOFOLLOW_SYMLINKS);
|
|
var info = File.new_for_path(installed.state_path).query_info(FileAttribute.STANDARD_SYMLINK_TARGET, FileQueryInfoFlags.NOFOLLOW_SYMLINKS);
|
|
|
var target = info.get_symlink_target();
|
|
var target = info.get_symlink_target();
|
|
|
- return target != null ? new CachedPackage(target) : installed;
|
|
|
|
|
|
|
+ if(target != null) {
|
|
|
|
|
+ // mark_installed records absolute targets, but a relative
|
|
|
|
|
+ // target (a moved state directory, a hand-made mark) must
|
|
|
|
|
+ // resolve against the mark's directory, never the process
|
|
|
|
|
+ // working directory
|
|
|
|
|
+ if(!Path.is_absolute(target)) {
|
|
|
|
|
+ target = Path.build_filename(Path.get_dirname(installed.state_path), target);
|
|
|
|
|
+ }
|
|
|
|
|
+ return new CachedPackage(target);
|
|
|
|
|
+ }
|
|
|
|
|
+ return installed;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|