rev |
line source |
bsw@1656
|
1 -- Configuration of lf4rcs
|
bsw@1656
|
2 -- ------------------------------------------------------------------------
|
bsw@1656
|
3 config.lf4rcs = {}
|
bsw@1656
|
4
|
bsw@1656
|
5 -- Example configuration for controlling a Git repository
|
bsw@1656
|
6
|
bsw@1656
|
7 config.lf4rcs.git = {
|
bsw@1656
|
8
|
bsw@1656
|
9 render_draft_reference = function(url, draft)
|
bsw@1656
|
10 if not draft.external_reference then return end
|
bsw@1656
|
11 ui.tag{ content = _"Changeset:" }
|
bsw@1656
|
12 slot.put(" ")
|
bsw@1656
|
13 ui.link{
|
bsw@1656
|
14 text = draft.external_reference,
|
bsw@1656
|
15 external = url .. ";a=commit;h=" .. draft.external_reference
|
bsw@1656
|
16 }
|
bsw@1656
|
17 end,
|
bsw@1656
|
18
|
bsw@1656
|
19 get_remote_user = function()
|
bsw@1656
|
20 return os.getenv("REMOTE_USER")
|
bsw@1656
|
21 end,
|
bsw@1656
|
22
|
bsw@1656
|
23 get_branches = function(path, exec)
|
bsw@1656
|
24 local branches = {}
|
bsw@1656
|
25 for line in io.lines() do
|
bsw@1656
|
26 local oldrev, newrev, branch = string.match(line, "([^ ]+) ([^ ]+) refs/heads/(.+)")
|
bsw@1656
|
27 if not branch then
|
bsw@1656
|
28 return nil, "unexpected format from git hook environment"
|
bsw@1656
|
29 end
|
bsw@1656
|
30 branches[branch] = { newrev }
|
bsw@1656
|
31 end
|
bsw@1656
|
32 return branches
|
bsw@1656
|
33 end,
|
bsw@1656
|
34
|
bsw@1656
|
35 commit = function(path, exec, branch, target_node_id, close_message, merge_message)
|
bsw@1656
|
36 if merge_message then
|
bsw@1656
|
37 exec("git", "-C", path, "checkout", "-f", "master")
|
bsw@1656
|
38 exec("git", "-C", path, "merge", target_node_id, "-m", merge_message)
|
bsw@1656
|
39 exec("git", "-C", path, "push", "origin", "master")
|
bsw@1656
|
40 end
|
bsw@1656
|
41 end
|
bsw@1656
|
42
|
bsw@1656
|
43 }
|
bsw@1656
|
44
|
bsw@1656
|
45 -- Example configuration for controlling a Mercurial repository
|
bsw@1656
|
46 config.lf4rcs.hg = {
|
bsw@1656
|
47
|
bsw@1656
|
48 working_branch_name = "work",
|
bsw@1656
|
49
|
bsw@1656
|
50 render_draft_reference = function(url, draft)
|
bsw@1656
|
51 if not draft.external_reference then return end
|
bsw@1656
|
52 ui.tag{ content = _"Changeset graph:" }
|
bsw@1656
|
53 slot.put(" ")
|
bsw@1656
|
54 ui.link{
|
bsw@1656
|
55 text = draft.external_reference,
|
bsw@1656
|
56 external = url .. "/graph/" .. draft.external_reference
|
bsw@1656
|
57 }
|
bsw@1656
|
58 end,
|
bsw@1656
|
59
|
bsw@1656
|
60 get_remote_user = function()
|
bsw@1656
|
61 return os.getenv("REMOTE_USER")
|
bsw@1656
|
62 end,
|
bsw@1656
|
63
|
bsw@1656
|
64 get_branches = function(path, exec)
|
bsw@1656
|
65 local first_node_id = os.getenv("HG_NODE")
|
bsw@1656
|
66 if not first_node_id then
|
bsw@1656
|
67 return nil, "internal error, no first node ID available"
|
bsw@1656
|
68 end
|
bsw@1656
|
69 local hg_log = exec(
|
bsw@1656
|
70 "hg", "log", "-R", path, "-r", first_node_id .. ":", "--template", "{branches}\n"
|
bsw@1656
|
71 )
|
bsw@1656
|
72 local branches = {}
|
bsw@1656
|
73 for branch in hg_log:gmatch("(.-)\n") do
|
bsw@1656
|
74 if branch == "" then branch = "default" end
|
bsw@1656
|
75 if not branches[branch] then
|
bsw@1656
|
76 branches[branch] = {}
|
bsw@1656
|
77 local head_lines = exec(
|
bsw@1656
|
78 "hg", "heads", "-R", path, "--template", "{node}\n", branch
|
bsw@1656
|
79 )
|
bsw@1656
|
80 for node_id in string.gmatch(head_lines, "[^\n]+") do
|
bsw@1656
|
81 table.insert(branches[branch], node_id)
|
bsw@1656
|
82 end
|
bsw@1656
|
83 end
|
bsw@1656
|
84 end
|
bsw@1656
|
85 return branches
|
bsw@1656
|
86 end,
|
bsw@1656
|
87
|
bsw@1656
|
88 extra_checks = function(path, exec)
|
bsw@1656
|
89 local result = exec("hg", "heads", "-t", "-c")
|
bsw@1656
|
90 for branch in string.gmatch(result, "[^\n]+") do
|
bsw@1656
|
91 if branch == lf4rcs.config.hg.working_branch_name then
|
bsw@1656
|
92 return nil, "open head found for branch " .. lf4rcs.config.hg.working_branch_name
|
bsw@1656
|
93 end
|
bsw@1656
|
94 end
|
bsw@1656
|
95 return true
|
bsw@1656
|
96 end,
|
bsw@1656
|
97
|
bsw@1656
|
98 commit = function(path, exec, branch, target_node_id, close_message, merge_message)
|
bsw@1656
|
99 exec("hg", "up", "-R", path, "-C", "-r", target_node_id)
|
bsw@1656
|
100 exec("hg", "commit", "-R", path, "--close-branch", "-m", close_message)
|
bsw@1656
|
101 if merge_message then
|
bsw@1656
|
102 exec("hg", "up", "-R", path, "-C", "-r", "default")
|
bsw@1656
|
103 exec("hg", "merge", "-R", path, "-r", "tip")
|
bsw@1656
|
104 exec("hg", "commit", "-R", path, "-m", merge_message)
|
bsw@1656
|
105 end
|
bsw@1656
|
106 end
|
bsw@1656
|
107
|
bsw@1656
|
108 }
|
bsw@1656
|
109
|
bsw@1656
|
110 -- Grace period after creating an initiative for pushing changes during verification phase
|
bsw@1656
|
111 -- disabled by default (nil), use PostgreSQL interval notation
|
bsw@1656
|
112 -- config.lf4rcs.push_grace_period = nil
|
bsw@1656
|
113
|
bsw@1656
|
114 lf4rcs.init()
|
bsw@1656
|
115
|