Compare commits

...
11 Commits
Author SHA1 Message Date
Ole André Vadla Ravnås 20d5d121b7 subprojects: Prepare for release 2025-06-20 01:13:54 +02:00
Ole André Vadla Ravnås dc71534220 subprojects: Bump outdated 2025-06-20 01:12:26 +02:00
Ole André Vadla Ravnås 35afee9b4a package-manager: Handle tarballs with root entries
Like if there's a directory entry for "package/", or somehow any files
at the root level.
2025-06-20 01:11:39 +02:00
Ole André Vadla Ravnås 7b130e6eba package-manager: Fix handling of scoped specs 2025-06-20 01:11:39 +02:00
Ole André Vadla Ravnås d28c46c332 package-manager: Fix a stylistic inconsistency 2025-06-20 01:11:39 +02:00
Ole André Vadla Ravnås ab103a73ca package-manager: Simplify substring logic 2025-06-20 01:11:39 +02:00
Ole André Vadla Ravnås 7b7d9acf8c subprojects: Prepare for release 2025-06-19 23:25:44 +02:00
Ole André Vadla Ravnås 215076a0fa subprojects: Bump outdated 2025-06-19 23:23:46 +02:00
Ole André Vadla Ravnås 3d47bf73b4 package-manager: Only report installed packages
The toplevel packages that were left untouched should not be included.

Also simplify the install() logic while at it.
2025-06-19 23:22:22 +02:00
Ole André Vadla Ravnås 7d84a44c7f package-manager: Fix the lockfile up-to-date path 2025-06-19 22:55:19 +02:00
Ole André Vadla Ravnås ef7e0a88e0 package-manager: Fix two stylistic inconsistencies 2025-06-19 22:53:09 +02:00
2 changed files with 39 additions and 51 deletions

No files matched your search

+38 -50
View File
@@ -108,9 +108,9 @@ namespace Frida {
foreach (string spec_str in opts.specs) {
string name, version_spec_val;
int at = spec_str.last_index_of ("@");
if (at != -1) {
name = spec_str.substring (0, at);
version_spec_val = spec_str.substring (at + 1);
if (at > 0) {
name = spec_str[:at];
version_spec_val = spec_str[at + 1:];
} else {
name = spec_str;
version_spec_val = "latest";
@@ -120,9 +120,8 @@ namespace Frida {
install_progress (PREPARING_DEPENDENCIES, 0.05);
var wanted_deps_list = new Gee.ArrayList<PackageDependency> ();
foreach (var dep_entry in manifest.dependencies.all.values) {
foreach (var dep_entry in manifest.dependencies.all.values)
wanted_deps_list.add (dep_entry);
}
foreach (var e in specs.entries) {
string name = e.key;
string version_spec_val = e.value;
@@ -192,55 +191,36 @@ namespace Frida {
double physical_completion_start_fraction = dep_processing_start_fraction + dep_processing_span;
double physical_completion_span = 0.05;
install_progress (AWAITING_COMPLETION, physical_completion_start_fraction);
foreach (var promise in all_physical_installs.values)
yield promise.future.wait_async (cancellable);
install_progress (DEPENDENCIES_PROCESSED, physical_completion_start_fraction + physical_completion_span);
var finished_installs = new Gee.HashMap<string, PackageLockEntry> ();
install_progress (AWAITING_COMPLETION, physical_completion_start_fraction);
foreach (var entry in all_physical_installs.entries)
finished_installs[entry.key] = yield entry.value.future.wait_async (cancellable);
install_progress (DEPENDENCIES_PROCESSED, physical_completion_start_fraction + physical_completion_span);
var pkgs = new Gee.ArrayList<Package> ();
var new_manifest_dependencies = new PackageDependencies ();
foreach (var future_ple in initial_dep_link_futures) {
PackageLockEntry ple = yield future_ple.wait_async (cancellable);
PackageDependency? original_wanted_dep = null;
foreach (var wd in wanted_deps_list) {
if (wd == ple.toplevel_dep) {
original_wanted_dep = wd;
break;
}
}
if (original_wanted_dep != null) {
new_manifest_dependencies.add (new PackageDependency () {
name = ple.name,
version = original_wanted_dep.derive_version (ple.version),
role = original_wanted_dep.role,
});
}
if (ple.newly_installed)
pkgs.add (new Package (ple.name, ple.version, ple.description));
var original_dep = ple.toplevel_dep;
new_manifest_dependencies.add (new PackageDependency () {
name = ple.name,
version = original_dep.derive_version (ple.version),
role = original_dep.role,
});
}
manifest.dependencies = new_manifest_dependencies;
double finalizing_manifests_start_fraction = physical_completion_start_fraction + physical_completion_span;
install_progress (FINALIZING_MANIFESTS, finalizing_manifests_start_fraction);
yield write_back_manifests (manifest, finished_installs, pkg_json_file, lock_file, cancellable);
install_progress (FINALIZING_MANIFESTS, 0.95);
var pkgs = new Gee.ArrayList<Package> ();
foreach (var future_ple in initial_dep_link_futures) {
PackageLockEntry e = yield future_ple.wait_async (cancellable);
bool already_added = false;
foreach (var p in pkgs) {
if (p.name == e.name && p.version == e.version) {
already_added = true;
break;
}
}
if (!already_added)
pkgs.add (new Package (e.name, e.version, e.description));
}
install_progress (COMPLETE, 1.0);
return new PackageInstallResult (new PackageList (pkgs));
}
@@ -346,6 +326,7 @@ namespace Frida {
public string? license;
public PackageDependencies dependencies;
public PackageDependency toplevel_dep;
public bool newly_installed;
}
private async Manifest load_manifest (File pkg_json_file, File lock_file, Cancellable? cancellable) throws Error, IOError {
@@ -390,6 +371,11 @@ namespace Frida {
lock_r.read_member ("name");
pli.name = lock_r.get_string_value ();
lock_r.end_member ();
} else {
int last_start = path_key.last_index_of ("/node_modules/");
pli.name = (last_start != -1)
? path_key[last_start + 14:]
: path_key[13:];
}
lock_r.read_member ("version");
@@ -645,7 +631,8 @@ namespace Frida {
rpd_promise.resolve (rpd);
break;
}
} catch (Error e) { }
} catch (Error e) {
}
}
}
}
@@ -693,7 +680,8 @@ namespace Frida {
description = existing_ple.description,
license = existing_ple.license,
dependencies = existing_ple.dependencies,
toplevel_dep = toplevel_dep
toplevel_dep = toplevel_dep,
newly_installed = existing_ple.newly_installed
});
return;
}
@@ -724,9 +712,8 @@ namespace Frida {
File sub_deps_parent_node_modules_dir = target_dir.get_child ("node_modules");
PackageDependencies dependencies_to_recurse = rpd.dependencies;
if (!dependencies_to_recurse.all.is_empty) {
if (!dependencies_to_recurse.all.is_empty)
FS.mkdirp (sub_deps_parent_node_modules_dir, cancellable);
}
foreach (PackageDependency d in dependencies_to_recurse.all.values) {
bool install_this_sub_dep = d.role == RUNTIME || d.role == OPTIONAL;
@@ -773,7 +760,8 @@ namespace Frida {
description = rpd.description,
license = rpd.license,
dependencies = rpd.dependencies,
toplevel_dep = toplevel_dep
toplevel_dep = toplevel_dep,
newly_installed = !already_correctly_installed
});
} catch (GLib.Error e) {
@@ -1628,10 +1616,10 @@ namespace Frida {
string core_part_of_spec = stripped_spec;
int plus_idx = core_part_of_spec.index_of_char ('+');
if (plus_idx != -1)
core_part_of_spec = core_part_of_spec.substring (0, plus_idx);
core_part_of_spec = core_part_of_spec[:plus_idx];
int dash_idx = core_part_of_spec.index_of_char ('-');
if (dash_idx != -1)
core_part_of_spec = core_part_of_spec.substring (0, dash_idx);
core_part_of_spec = core_part_of_spec[:dash_idx];
return count_char (core_part_of_spec, '.') == 2;
} catch (Error e) {
@@ -1953,11 +1941,11 @@ namespace Frida {
string size_field = header.read_fixed_string (124, 12).split (" ")[0];
uint64 file_size = 0;
if (!uint64.try_parse (size_field, out file_size, null, 8))
throw new Error.PROTOCOL ("Invalid tarball size (file '%s' corrupt)", safe_entry);
throw new Error.PROTOCOL ("Invalid tarball size (file '%s' corrupt)", name);
var typeflag = (char) header.read_uint8 (156);
if (typeflag == '0' || typeflag == '\0') {
if ((typeflag == '0' || typeflag == '\0') && safe_entry != "") {
current_file = root.get_child (safe_entry);
FS.mkdirp (current_file.get_parent (), cancellable);
try {
@@ -1983,9 +1971,9 @@ namespace Frida {
private static string sanitize_entry (string name, File root) throws Error {
int slash = name.index_of ("/");
string entry = (slash == -1) ? name : name[slash + 1:];
if (entry.length == 0)
throw new Error.PROTOCOL ("Empty tar entry name: %s", name);
string entry = (slash == -1) ? "" : name[slash + 1:];
if (entry == "")
return entry;
entry = entry.replace ("/", Path.DIR_SEPARATOR_S);
+1 -1
View File
@@ -1,6 +1,6 @@
[wrap-git]
url = https://github.com/frida/frida-gum.git
revision = 17.2.1
revision = 17.2.3
depth = 1
[provide]