util/mercurial.lua
author Matthew Wild <mwild1@gmail.com>
Fri, 23 Feb 2018 15:30:00 +0000
changeset 8531 67311cda0625
parent 6588 ec94dc502113
child 10537 a6cc5b844d7b
permissions -rw-r--r--
net.server_select: Better detection of errors for outgoing connections On connection failure, a socket is marked readable and writable. So to detect initial connection failures (connection refused, etc.) we now watch for sockets becoming readable during initial connection, and also read from readable sockets before writing to writable sockets. This should fix 'onconnect' being called for outgoing connections that actually failed.
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
ec94dc502113 util.mercurial: Utility functions for Mercurial repositories
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
		local hg_archival,e = io.open(path.."/.hg_archival.txt");
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;