mirror of
https://github.com/ziglang/zig.git
synced 2026-01-04 20:43:19 +00:00
zig build: add env_map entries to hash for Step.Run
This change fixes false-positive cache hits for run steps that get run with different sets of environment variables due the the environment map being excluded from the cache hash.
This commit is contained in:
parent
0d65b014ea
commit
172dc6c314
@ -620,6 +620,35 @@ fn make(step: *Step, options: Step.MakeOptions) !void {
|
||||
var man = b.graph.cache.obtain();
|
||||
defer man.deinit();
|
||||
|
||||
if (run.env_map) |env_map| {
|
||||
const KV = struct { []const u8, []const u8 };
|
||||
var kv_pairs = try std.ArrayList(KV).initCapacity(arena, env_map.count());
|
||||
var iter = env_map.iterator();
|
||||
while (iter.next()) |entry| {
|
||||
kv_pairs.appendAssumeCapacity(.{ entry.key_ptr.*, entry.value_ptr.* });
|
||||
}
|
||||
|
||||
std.mem.sortUnstable(KV, kv_pairs.items, {}, struct {
|
||||
fn lessThan(_: void, kv1: KV, kv2: KV) bool {
|
||||
const k1 = kv1[0];
|
||||
const k2 = kv2[0];
|
||||
|
||||
if (k1.len != k2.len) return k1.len < k2.len;
|
||||
|
||||
for (k1, k2) |c1, c2| {
|
||||
if (c1 == c2) continue;
|
||||
return c1 < c2;
|
||||
}
|
||||
unreachable; // two keys cannot be equal
|
||||
}
|
||||
}.lessThan);
|
||||
|
||||
for (kv_pairs.items) |kv| {
|
||||
man.hash.addBytes(kv[0]);
|
||||
man.hash.addBytes(kv[1]);
|
||||
}
|
||||
}
|
||||
|
||||
for (run.argv.items) |arg| {
|
||||
switch (arg) {
|
||||
.bytes => |bytes| {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user