Compare commits

..

No commits in common. "master" and "v6.0" have entirely different histories.
master ... v6.0

3 changed files with 14 additions and 32 deletions

5
XD.1
View file

@ -26,7 +26,6 @@ tab(;) allbox;
c;l.
:;default
\;;in a git repo
=;in a git repo during a bisect
8;in a git repo with stashed changes
X;in a git repo during a merge
O;in a git repo during a rebase
@ -57,8 +56,8 @@ c;l.
returns the number that was passed in to allow the user to re-run the program
and get the same results. If there's an internal error
.Nm
returns 1. If you wish to find out more infomation about the error pass in
-Derr at build time.
returns 1. If you wish to find out more infomation about the error enable ERR
in the config.mk.
.Sh OPTIONS
.Ss -v
Print version information to stdout and exit.

View file

@ -10,7 +10,7 @@ const std = @import("std");
const util = @import("util.zig");
repo: ?*c.git_repository,
git_path: [:0]const u8,
git_path: []const u8,
repo_path: []const u8,
allocator: std.mem.Allocator,
repo_state: c_int,
@ -43,7 +43,7 @@ pub fn init(allocator: std.mem.Allocator) !?*Git {
.allocator = allocator,
.repo_state = undefined,
.repo_path = undefined,
.cache = .init(self.allocator, std.mem.span(self.git_path.ptr)),
.cache = .init(self.allocator, self.git_path),
};
if (c.git_repository_open(&self.repo, repo_root.?.ptr) != 0) {
@ -114,20 +114,6 @@ pub fn inRebase(self: *Git) bool {
};
}
pub fn inBisect(self: *Git) bool {
const s = perf.s();
defer perf.e(s, @src());
const path = std.fs.path.join(self.allocator, &[_][]const u8{
std.mem.span(self.git_path.ptr),
"BISECT_LOG",
}) catch return false;
defer self.allocator.free(path);
std.fs.cwd().access(path, .{ .mode = .read_only }) catch return false;
return true;
}
pub fn hasStaged(self: *Git) bool {
const s = perf.s();
defer perf.e(s, @src());
@ -252,7 +238,7 @@ pub fn headIsDetached(self: *Git) bool {
return c.git_repository_head_detached(self.repo) == 1;
}
fn findRepoRoot(allocator: std.mem.Allocator) !?[:0]u8 {
fn findRepoRoot(allocator: std.mem.Allocator) !?[]u8 {
const s = perf.s();
defer perf.e(s, @src());
@ -274,18 +260,20 @@ fn findRepoRoot(allocator: std.mem.Allocator) !?[:0]u8 {
};
return switch (stat.kind) {
.directory => try allocator.dupeZ(u8, try cur_path.realpath(
.directory => try allocator.dupe(u8, try cur_path.realpathZ(
".git",
&buf,
)),
.file => {
@branchHint(.cold);
const f = try cur_path.openFile(".git", .{ .mode = .read_only });
const file_reader = f.reader(&buf);
var reader = file_reader.interface;
const read = try reader.readSliceShort(&buf);
const prefix = "gitdir: ";
var file_buf: [std.fs.max_path_bytes + prefix.len]u8 = undefined;
const read = try cur_path.readFile(".git", &file_buf);
if (read.len > 0 and std.mem.eql(u8, file_buf[0..prefix.len], prefix)) {
return try allocator.dupeZ(u8, read[prefix.len..read.len - 1]);
if (std.mem.startsWith(u8, &buf, prefix)) {
buf[read - 1] = 0; // remove the newline
return try allocator.dupe(u8, buf[prefix.len..]);
}
return null;
},

View file

@ -59,12 +59,7 @@ pub fn main() u8 {
var git = if (config.git) try @import("Git.zig").init(allocator) orelse null;
defer if (config.git and git != null) git.?.deinit();
if (config.git and git != null) {
if (git.?.inBisect()) {
face[@intFromEnum(FaceParts.eyes)] = .{
.symbol = '=',
.explanation = "The current git repo is bisecting.",
};
} else if (git.?.hasStashes()) {
if (git.?.hasStashes()) {
face[@intFromEnum(FaceParts.eyes)] = .{
.symbol = '8',
.explanation = "The current git repo has stashed changes.",