@@ -72,36 +72,43 @@ pub fn update_self(alloc: Allocator, cp: CommonPaths) !void {
7272 if (download_tarball .file_size < download_tarball .actual_size )
7373 try install .download_tarball (alloc , & client , download_tarball .url , & download_tarball .writer .? , download_tarball .file_size , download_tarball .actual_size );
7474 try download_tarball .file_handle .? .seekTo (0 );
75- const bin_dir = try cp .zigverm_root .openDir ("bin/" , .{});
7675
7776 var buf : [4096 ]u8 = undefined ;
7877 var src = File .Reader .init (download_tarball .file_handle .? , & buf );
7978
8079 var zipfile = try ZipArchive .openFromFileReader (alloc , & src );
8180 defer zipfile .close ();
8281
83- var m_iter = zipfile .members .iterator ();
84- while (m_iter .next ()) | i | {
85- var entry = i .value_ptr .* ;
86- if (entry .is_dir ) continue ;
87- const filename = std .fs .path .basename (i .key_ptr .* );
88- bin_dir .deleteFile (filename ) catch | e | {
89- if (e != error .FileNotFound ) return e ;
90- };
91- const file = try bin_dir .createFile (filename , .{ .truncate = true , .lock = .shared });
92- var file_writer = file .writer (& buf );
93- const intf = & file_writer .interface ;
94- defer file .close ();
95-
96- try entry .decompressWriter (intf );
97- if (builtin .os .tag != .windows ) {
98- try file .chmod (0o755 );
99- }
100- }
101- std .log .info ("zigverm updated successfully\n " , .{});
82+ const zigverm_path = try std .mem .join (alloc , "/" , &.{ dl_filename , "zigverm" });
83+ const zig_path = try std .mem .join (alloc , "/" , &.{ dl_filename , "zigverm" });
84+ try writeZipMember (zipfile , zigverm_path , cp );
85+ try writeZipMember (zipfile , zig_path , cp );
86+
87+ std .log .info ("zigverm updated successfully" , .{});
10288 try cp .download_dir .deleteFile (full_dl_filename );
10389}
10490
91+ fn writeZipMember (zipfile : ZipArchive , path : []const u8 , cp : CommonPaths ) ! void {
92+ const filename = std .fs .path .basename (path );
93+ const bin_dir = try cp .zigverm_root .openDir ("bin/" , .{});
94+ bin_dir .deleteFile (filename ) catch | e | {
95+ if (e != error .FileNotFound ) return e ;
96+ };
97+
98+ var buf : [4096 ]u8 = undefined ;
99+ const file = try bin_dir .createFile (filename , .{ .truncate = true , .lock = .shared });
100+ var file_writer = file .writer (& buf );
101+ const intf = & file_writer .interface ;
102+ defer file .close ();
103+
104+ var entry = zipfile .getFileByName (path ).? ;
105+
106+ try entry .decompressWriter (intf );
107+ if (builtin .os .tag != .windows ) {
108+ try file .chmod (0o755 );
109+ }
110+ }
111+
105112fn read_github_releases_data (alloc : Allocator , client : * Client ) ! json. Parsed (json .Value ) {
106113 const uri = try std .Uri .parse ("https://api.github.com/repos/AMythicDev/zigverm/releases/latest" );
107114 var req = install .make_request (client , uri );
0 commit comments