diff options
author | Kim Alvefur <zash@zash.se> | 2015-01-21 02:55:18 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2015-01-21 02:55:18 +0100 |
commit | c5cd1e54288930596391572b857461a0ca69dd8f (patch) | |
tree | 4348218d07378c54896ea83203d879fb1ae2f909 | |
parent | ecf0dc01952f8e2c4013aa0964b70ac82b25ae04 (diff) | |
download | prosody-c5cd1e54288930596391572b857461a0ca69dd8f.tar.gz prosody-c5cd1e54288930596391572b857461a0ca69dd8f.zip |
util.mercurial: Utility functions for Mercurial repositories
-rw-r--r-- | util/mercurial.lua | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/util/mercurial.lua b/util/mercurial.lua new file mode 100644 index 00000000..3f75c4c1 --- /dev/null +++ b/util/mercurial.lua @@ -0,0 +1,34 @@ + +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"); + 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; |