util/mercurial.lua
author Kim Alvefur <zash@zash.se>
Tue, 14 May 2024 17:07:47 +0200
changeset 13494 6f840763fc73
parent 10537 a6cc5b844d7b
permissions -rw-r--r--
net.server_epoll: Add support for systemd socket activation Allows creating listening sockets and accepting client connections before Prosody starts. This is unlike normal Prosody dynamic resource management, where ports may added and removed at any time, and the ports defined by the config. Weird things happen if these are closed (e.g. due to reload) so here we prevent closing and ensure sockets are reused when opened again.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6588
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
local lfs = require"lfs";
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
local hg = { };
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
function hg.check_id(path)
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
	if lfs.attributes(path, 'mode') ~= "directory" then
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
		return nil, "not a directory";
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
	end
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
	local hg_dirstate = io.open(path.."/.hg/dirstate");
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
	local hgid, hgrepo
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
	if hg_dirstate then
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
		hgid = ("%02x%02x%02x%02x%02x%02x"):format(hg_dirstate:read(6):byte(1, 6));
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
		hg_dirstate:close();
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
		local hg_changelog = io.open(path.."/.hg/store/00changelog.i");
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
		if hg_changelog then
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
			hg_changelog:seek("set", 0x20);
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
			hgrepo = ("%02x%02x%02x%02x%02x%02x"):format(hg_changelog:read(6):byte(1, 6));
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
			hg_changelog:close();
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
		end
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
	else
10537
a6cc5b844d7b util.mercurial: Ignore an unused error variable [luacheck]
Kim Alvefur <zash@zash.se>
parents: 6588
diff changeset
    22
		local hg_archival,e = io.open(path.."/.hg_archival.txt"); -- luacheck: ignore 211/e
6588
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
		if hg_archival then
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
			local repo = hg_archival:read("*l");
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
			local node = hg_archival:read("*l");
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
			hg_archival:close()
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
			hgid = node and node:match("^node: (%x%x%x%x%x%x%x%x%x%x%x%x)")
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
			hgrepo = repo and repo:match("^repo: (%x%x%x%x%x%x%x%x%x%x%x%x)")
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
		end
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
	end
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
	return hgid, hgrepo;
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
end
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
return hg;