File

util/mercurial.lua @ 13571:ca041359c045

net.server_epoll: Don't try to flush buffer on closed connections Attempt to fix a bug where connections are somehow closed twice, leading to bad things happening elsewhere. With LuaSec, closed connections are generally already too closed to write anything to anyway since it does not support unidirectional shutdown.
author Kim Alvefur <zash@zash.se>
date Tue, 19 Nov 2024 00:41:02 +0100
parent 10533:a6cc5b844d7b
line wrap: on
line source


local lfs = require"lfs";

local hg = { };

function hg.check_id(path)
	if lfs.attributes(path, 'mode') ~= "directory" then
		return nil, "not a directory";
	end
	local hg_dirstate = io.open(path.."/.hg/dirstate");
	local hgid, hgrepo
	if hg_dirstate then
		hgid = ("%02x%02x%02x%02x%02x%02x"):format(hg_dirstate:read(6):byte(1, 6));
		hg_dirstate:close();
		local hg_changelog = io.open(path.."/.hg/store/00changelog.i");
		if hg_changelog then
			hg_changelog:seek("set", 0x20);
			hgrepo = ("%02x%02x%02x%02x%02x%02x"):format(hg_changelog:read(6):byte(1, 6));
			hg_changelog:close();
		end
	else
		local hg_archival,e = io.open(path.."/.hg_archival.txt"); -- luacheck: ignore 211/e
		if hg_archival then
			local repo = hg_archival:read("*l");
			local node = hg_archival:read("*l");
			hg_archival:close()
			hgid = node and node:match("^node: (%x%x%x%x%x%x%x%x%x%x%x%x)")
			hgrepo = repo and repo:match("^repo: (%x%x%x%x%x%x%x%x%x%x%x%x)")
		end
	end
	return hgid, hgrepo;
end

return hg;