Эх сурвалжийг харах

fix(manifest): handle existing symlinks and correct path resolution

- Delete existing symlinks before creating new ones in dry_run mode
- Use `destination` field instead of `path` for symbolic link targets
- Update environment variable paths to use `add_prefix` method for proper prefix handling
clanker 1 сар өмнө
parent
commit
b8b00773ab
2 өөрчлөгдсөн 19 нэмэгдсэн , 12 устгасан
  1. 4 1
      src/lib/Manifest.vala
  2. 15 11
      src/lib/Paths.vala

+ 4 - 1
src/lib/Manifest.vala

@@ -435,8 +435,11 @@ namespace Usm {
                 }
                 else if(resource.value.file_type == Usm.ManifestFileType.SYMBOLIC_LINK) {
                     var dest = File.new_for_path(path);
+                    if(!dry_run && dest.query_exists()) {
+                        dest.delete();
+                    }
                     if(!dry_run){
-                        dest.make_symbolic_link(resource.value.path ?? "");
+                        dest.make_symbolic_link(resource.value.destination ?? "");
                     }
                 }
                 else {

+ 15 - 11
src/lib/Paths.vala

@@ -27,20 +27,20 @@ namespace Usm {
         public void set_envs() {
             Environment.set_variable("DESTDIR", Paths.ensure_trailing_slash(destination), true);
             Environment.set_variable("PREFIX", Paths.ensure_trailing_slash(prefix), true);
-            Environment.set_variable("BINDIR", Paths.ensure_trailing_slash(bin), true);
-            Environment.set_variable("INCLUDEDIR", Paths.ensure_trailing_slash(include), true);
-            Environment.set_variable("DATADIR", Paths.ensure_trailing_slash(data), true);
-            Environment.set_variable("INFODIR", Paths.ensure_trailing_slash(info), true);
-            Environment.set_variable("LIBDIR", Paths.ensure_trailing_slash(lib), true);
-            Environment.set_variable("CANONLIBDIR", Paths.ensure_trailing_slash(canonlib), true);
-            Environment.set_variable("MANDIR", Paths.ensure_trailing_slash(man), true);
-            Environment.set_variable("LIBEXECDIR", Paths.ensure_trailing_slash(libexec), true);
-            Environment.set_variable("LOCALEDIR", Paths.ensure_trailing_slash(locale), true);
+            Environment.set_variable("BINDIR", add_prefix(bin), true);
+            Environment.set_variable("INCLUDEDIR", add_prefix(include), true);
+            Environment.set_variable("DATADIR", add_prefix(data), true);
+            Environment.set_variable("INFODIR", add_prefix(info), true);
+            Environment.set_variable("LIBDIR", add_prefix(lib), true);
+            Environment.set_variable("CANONLIBDIR", add_prefix(canonlib), true);
+            Environment.set_variable("MANDIR", add_prefix(man), true);
+            Environment.set_variable("LIBEXECDIR", add_prefix(libexec), true);
+            Environment.set_variable("LOCALEDIR", add_prefix(locale), true);
             Environment.set_variable("LOCALSTATEDIR", Paths.ensure_trailing_slash(local_state), true);
-            Environment.set_variable("SBINDIR", Paths.ensure_trailing_slash(sbin), true);
+            Environment.set_variable("SBINDIR", add_prefix(sbin), true);
             Environment.set_variable("SHAREDSTATEDIR", Paths.ensure_trailing_slash(shared_state), true);
             Environment.set_variable("SYSCONFIGDIR", Paths.ensure_trailing_slash(sys_config), true);
-            Environment.set_variable("TAGSDIR", Paths.ensure_trailing_slash(tags), true);
+            Environment.set_variable("TAGSDIR", add_prefix(tags), true);
         }
 
         public static string ensure_trailing_slash(string path) {
@@ -50,6 +50,10 @@ namespace Usm {
             return path.has_suffix("/") ? path : path + "/";
         }
 
+        public string add_prefix(string path) {
+            return ensure_trailing_slash(Path.build_filename(prefix, path));
+        }
+
         public string get_suggested_base_path_for_type(ResourceType type) {
             switch (type) {
                 case ResourceType.ROOT_PATH: