Skip to content

Commit c98dd29

Browse files
committed
refactor: src/main.zig
1 parent 3552fb9 commit c98dd29

File tree

2 files changed

+126
-122
lines changed

2 files changed

+126
-122
lines changed

src/common/root.zig

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,7 @@ pub const Release = struct {
6161

6262
for (releases.object.keys()) |release| {
6363
if (streql(release, "master")) continue;
64-
6564
var r = std.SemanticVersion.parse(release) catch unreachable;
66-
6765
if (self.spec == .MajorMinorVersionSpec and (base_spec.major != r.major or base_spec.minor != r.minor)) continue;
6866

6967
if (self.actual_version == null) {

src/main.zig

Lines changed: 126 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -48,64 +48,8 @@ pub fn main() !void {
4848
try remove_release(alloc, rel, cp);
4949
},
5050
Cli.show => try show_info(alloc, cp),
51-
Cli.std => |ver| {
52-
var best_match: []const u8 = undefined;
53-
if (ver) |v| {
54-
best_match = v;
55-
} else {
56-
const dir_to_check = try std.process.getCwdAlloc(alloc);
57-
var overrides = try common.overrides.read_overrides(alloc, cp);
58-
defer overrides.deinit();
59-
60-
best_match = try alloc.dupe(u8, (try overrides.active_version(dir_to_check)).ver);
61-
}
62-
63-
const zig_path = try std.fs.path.join(alloc, &.{
64-
common.paths.CommonPaths.get_zigverm_root(),
65-
"installs/",
66-
try common.release_name(alloc, try common.Release.releasefromVersion(best_match)),
67-
"zig",
68-
});
69-
70-
var executable = std.ArrayList([]const u8).init(alloc);
71-
try executable.append(zig_path);
72-
try executable.append("std");
73-
var child = std.process.Child.init(executable.items, alloc);
74-
const term = try child.spawnAndWait();
75-
std.process.exit(term.Exited);
76-
},
77-
Cli.reference => |ver| {
78-
var best_match: []const u8 = undefined;
79-
if (ver) |v| {
80-
best_match = v;
81-
} else {
82-
const dir_to_check = try std.process.getCwdAlloc(alloc);
83-
var overrides = try common.overrides.read_overrides(alloc, cp);
84-
defer overrides.deinit();
85-
86-
best_match = try alloc.dupe(u8, (try overrides.active_version(dir_to_check)).ver);
87-
}
88-
89-
const langref_path = try std.fs.path.join(alloc, &.{
90-
common.paths.CommonPaths.get_zigverm_root(),
91-
"installs/",
92-
try common.release_name(alloc, try common.Release.releasefromVersion(best_match)),
93-
"doc",
94-
"langref.html",
95-
});
96-
97-
const main_exe = switch (builtin.os.tag) {
98-
.windows => "explorer",
99-
.macos => "open",
100-
else => "xdg-open",
101-
};
102-
103-
var executable = std.ArrayList([]const u8).init(alloc);
104-
try executable.append(main_exe);
105-
try executable.append(langref_path);
106-
var child = std.process.Child.init(executable.items, alloc);
107-
try child.spawn();
108-
},
51+
Cli.std => |ver| open_std(ver),
52+
Cli.reference => |ver| open_reference(alloc, ver),
10953
Cli.override => |oa| {
11054
var override_args = oa;
11155
const rel = try Release.releasefromVersion(override_args.version);
@@ -120,68 +64,7 @@ pub fn main() !void {
12064
try override_rm(alloc, cp, directory);
12165
},
12266
Cli.update_self => try update_self.update_self(alloc, cp),
123-
Cli.update => |version_possible| {
124-
var versions: [][]const u8 = undefined;
125-
if (version_possible) |v| {
126-
versions = @constCast(&[1][]const u8{v});
127-
} else versions = try installed_versions(alloc, cp);
128-
129-
var already_update = std.ArrayList([]const u8).init(alloc);
130-
var client = Client{ .allocator = alloc };
131-
defer client.deinit();
132-
const resp = try install.get_json_dslist(&client);
133-
const releases = try json.parseFromSliceLeaky(json.Value, alloc, resp.body[0..resp.length], .{});
134-
135-
for (versions) |v| {
136-
var rel = try Release.releasefromVersion(v);
137-
const release_name = try common.release_name(alloc, rel);
138-
if (cp.install_dir.openDir(release_name, .{})) |_| {
139-
var to_update = false;
140-
if (rel.spec == common.ReleaseSpec.FullVersionSpec) {
141-
to_update = false;
142-
} else if (rel.spec == common.ReleaseSpec.Master) {
143-
const zig_version = try std.SemanticVersion.parse((try get_version_from_exe(alloc, release_name)).items);
144-
var next_master_release = try Release.releasefromVersion("master");
145-
try next_master_release.resolve(releases);
146-
if (zig_version.order(next_master_release.actual_version.?) != std.math.Order.eq) {
147-
to_update = false;
148-
}
149-
} else if (rel.spec == common.ReleaseSpec.Stable) {
150-
const zig_version = try std.SemanticVersion.parse((try get_version_from_exe(alloc, release_name)).items);
151-
var next_stable_release = try Release.releasefromVersion("stable");
152-
try next_stable_release.resolve(releases);
153-
154-
if (next_stable_release.actual_version.?.order(zig_version) == std.math.Order.gt) {
155-
to_update = true;
156-
}
157-
} else {
158-
var zig_version = try std.SemanticVersion.parse((try get_version_from_exe(alloc, release_name)).items);
159-
var format_buf: [32]u8 = undefined;
160-
var format_buf_stream = std.io.fixedBufferStream(&format_buf);
161-
zig_version.patch += 1;
162-
try zig_version.format("", .{}, format_buf_stream.writer());
163-
to_update = releases.object.contains(format_buf_stream.getWritten());
164-
while (releases.object.contains(format_buf_stream.getWritten())) {
165-
zig_version.patch += 1;
166-
try format_buf_stream.seekTo(0);
167-
try zig_version.format("", .{}, format_buf_stream.writer());
168-
}
169-
}
170-
if (to_update) {
171-
try install.install_release(alloc, &client, releases, &rel, cp);
172-
} else {
173-
try already_update.append(v);
174-
}
175-
} else |_| {
176-
try install.install_release(alloc, &client, releases, &rel, cp);
177-
}
178-
}
179-
if (already_update.items.len > 0) std.debug.print("\n", .{});
180-
181-
for (already_update.items) |v| {
182-
std.debug.print("\t{s} : Up to date\n", .{v});
183-
}
184-
},
67+
Cli.update => |version_possible| update_zig_installation(alloc, cp, version_possible),
18568
}
18669
}
18770

@@ -195,6 +78,66 @@ fn remove_release(alloc: Allocator, rel: Release, cp: CommonPaths) !void {
19578
std.log.info("Removed {s}", .{release_dir});
19679
}
19780

81+
fn open_std(alloc: Allocator, ver: []const u8) void {
82+
var best_match: []const u8 = undefined;
83+
if (ver) |v| {
84+
best_match = v;
85+
} else {
86+
const dir_to_check = try std.process.getCwdAlloc(alloc);
87+
var overrides = try common.overrides.read_overrides(alloc, cp);
88+
defer overrides.deinit();
89+
90+
best_match = try alloc.dupe(u8, (try overrides.active_version(dir_to_check)).ver);
91+
}
92+
93+
const zig_path = try std.fs.path.join(alloc, &.{
94+
common.paths.CommonPaths.get_zigverm_root(),
95+
"installs/",
96+
try common.release_name(alloc, try common.Release.releasefromVersion(best_match)),
97+
"zig",
98+
});
99+
100+
var executable = std.ArrayList([]const u8).init(alloc);
101+
try executable.append(zig_path);
102+
try executable.append("std");
103+
var child = std.process.Child.init(executable.items, alloc);
104+
const term = try child.spawnAndWait();
105+
std.process.exit(term.Exited);
106+
}
107+
108+
fn open_reference(alloc: Allocator, ver: []const u8) {
109+
var best_match: []const u8 = undefined;
110+
if (ver) |v| {
111+
best_match = v;
112+
} else {
113+
const dir_to_check = try std.process.getCwdAlloc(alloc);
114+
var overrides = try common.overrides.read_overrides(alloc, cp);
115+
defer overrides.deinit();
116+
117+
best_match = try alloc.dupe(u8, (try overrides.active_version(dir_to_check)).ver);
118+
}
119+
120+
const langref_path = try std.fs.path.join(alloc, &.{
121+
common.paths.CommonPaths.get_zigverm_root(),
122+
"installs/",
123+
try common.release_name(alloc, try common.Release.releasefromVersion(best_match)),
124+
"doc",
125+
"langref.html",
126+
});
127+
128+
const main_exe = switch (builtin.os.tag) {
129+
.windows => "explorer",
130+
.macos => "open",
131+
else => "xdg-open",
132+
};
133+
134+
var executable = std.ArrayList([]const u8).init(alloc);
135+
try executable.append(main_exe);
136+
try executable.append(langref_path);
137+
var child = std.process.Child.init(executable.items, alloc);
138+
try child.spawn();
139+
}
140+
198141
fn show_info(alloc: Allocator, cp: CommonPaths) !void {
199142
std.debug.print("zigverm root:\t{s}\n\n", .{CommonPaths.get_zigverm_root()});
200143
var iter = cp.install_dir.iterate();
@@ -270,3 +213,66 @@ fn get_version_from_exe(alloc: Allocator, release_name: []const u8) !std.ArrayLi
270213

271214
return version;
272215
}
216+
217+
fn update_zig_installation(alloc: Allocator, cp: CommonPaths, version_possible: [][]const u8) !void {
218+
var versions: [][]const u8 = undefined;
219+
if (version_possible) |v| {
220+
versions = @constCast(&[1][]const u8{v});
221+
} else versions = try installed_versions(alloc, cp);
222+
223+
var already_update = std.ArrayList([]const u8).init(alloc);
224+
var client = Client{ .allocator = alloc };
225+
defer client.deinit();
226+
const resp = try install.get_json_dslist(&client);
227+
const releases = try json.parseFromSliceLeaky(json.Value, alloc, resp.body[0..resp.length], .{});
228+
229+
for (versions) |v| {
230+
var rel = try Release.releasefromVersion(v);
231+
const release_name = try common.release_name(alloc, rel);
232+
if (cp.install_dir.openDir(release_name, .{})) |_| {
233+
var to_update = false;
234+
if (rel.spec == common.ReleaseSpec.FullVersionSpec) {
235+
to_update = false;
236+
} else if (rel.spec == common.ReleaseSpec.Master) {
237+
const zig_version = try std.SemanticVersion.parse((try get_version_from_exe(alloc, release_name)).items);
238+
var next_master_release = try Release.releasefromVersion("master");
239+
try next_master_release.resolve(releases);
240+
if (zig_version.order(next_master_release.actual_version.?) != std.math.Order.eq) {
241+
to_update = false;
242+
}
243+
} else if (rel.spec == common.ReleaseSpec.Stable) {
244+
const zig_version = try std.SemanticVersion.parse((try get_version_from_exe(alloc, release_name)).items);
245+
var next_stable_release = try Release.releasefromVersion("stable");
246+
try next_stable_release.resolve(releases);
247+
248+
if (next_stable_release.actual_version.?.order(zig_version) == std.math.Order.gt) {
249+
to_update = true;
250+
}
251+
} else {
252+
var zig_version = try std.SemanticVersion.parse((try get_version_from_exe(alloc, release_name)).items);
253+
var format_buf: [32]u8 = undefined;
254+
var format_buf_stream = std.io.fixedBufferStream(&format_buf);
255+
zig_version.patch += 1;
256+
try zig_version.format("", .{}, format_buf_stream.writer());
257+
to_update = releases.object.contains(format_buf_stream.getWritten());
258+
while (releases.object.contains(format_buf_stream.getWritten())) {
259+
zig_version.patch += 1;
260+
try format_buf_stream.seekTo(0);
261+
try zig_version.format("", .{}, format_buf_stream.writer());
262+
}
263+
}
264+
if (to_update) {
265+
try install.install_release(alloc, &client, releases, &rel, cp);
266+
} else {
267+
try already_update.append(v);
268+
}
269+
} else |_| {
270+
try install.install_release(alloc, &client, releases, &rel, cp);
271+
}
272+
}
273+
if (already_update.items.len > 0) std.debug.print("\n", .{});
274+
275+
for (already_update.items) |v| {
276+
std.debug.print("\t{s} : Up to date\n", .{v});
277+
}
278+
}

0 commit comments

Comments
 (0)