diff options
Diffstat (limited to 'src/install')
| -rw-r--r-- | src/install/install.zig | 20 | 
1 files changed, 17 insertions, 3 deletions
| diff --git a/src/install/install.zig b/src/install/install.zig index 862d61c05..2cf34725c 100644 --- a/src/install/install.zig +++ b/src/install/install.zig @@ -455,6 +455,11 @@ pub const Lockfile = struct {          var buf = file.readToEndAlloc(allocator, std.math.maxInt(usize)) catch |err| {              return LoadFromDiskResult{ .err = .{ .step = .read_file, .value = err } };          }; + +        return this.loadFromBytes(buf, allocator, log); +    } + +    pub fn loadFromBytes(this: *Lockfile, buf: []u8, allocator: std.mem.Allocator, log: *logger.Log) LoadFromDiskResult {          var stream = Stream{ .buffer = buf, .pos = 0 };          Lockfile.Serializer.load(this, &stream, allocator, log) catch |err| { @@ -1456,10 +1461,17 @@ pub const Lockfile = struct {                          const dependency_versions = requested_versions.get(i).?;                          const always_needs_quote = name[0] == '@'; - -                        for (dependency_versions) |dependency_version, j| { -                            if (j > 0) { +                        var prev_dependency_version: ?Dependency.Version = null; +                        var needs_comma = false; +                        for (dependency_versions) |dependency_version| { +                            if (needs_comma) { +                                if (prev_dependency_version) |prev| { +                                    if (prev.eql(dependency_version, string_buf, string_buf)) { +                                        continue; +                                    } +                                }                                  try writer.writeAll(", "); +                                needs_comma = false;                              }                              const version_name = dependency_version.literal.slice(string_buf);                              const needs_quote = always_needs_quote or std.mem.indexOfAny(u8, version_name, " |\t-/!") != null; @@ -1475,6 +1487,8 @@ pub const Lockfile = struct {                              if (needs_quote) {                                  try writer.writeByte('"');                              } +                            prev_dependency_version = dependency_version; +                            needs_comma = true;                          }                          try writer.writeAll(":\n"); | 
