Software /
code /
prosody
Annotate
util/mercurial.lua @ 12189:82c8e855c850
mod_storage_xep0227: treat roster metadata pseudo-entry correctly
The roster version is stored in a pseudo-item which has the key `false`.
The if condition in the touched code attempts to guard against this, but
it does not take into account that the jid prepping returns nil instead
of false.
By moving the jid prepping into the if, we can check for the metadata
entry safely.
author | Jonas Schäfer <jonas@wielicki.name> |
---|---|
date | Sat, 15 Jan 2022 15:40:29 +0100 |
parent | 10533:a6cc5b844d7b |
rev | line source |
---|---|
6585
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 |
10533
a6cc5b844d7b
util.mercurial: Ignore an unused error variable [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6585
diff
changeset
|
22 local hg_archival,e = io.open(path.."/.hg_archival.txt"); -- luacheck: ignore 211/e |
6585
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; |