@@ -56,6 +56,8 @@ local mt = {
56
56
local gitinfo = {}
57
57
setmetatable (gitinfo , mt )
58
58
59
+ local luakeys = require (' luakeys' )()
60
+
59
61
function api .trim (s )
60
62
return s and (s :gsub (" ^%s*(.-)%s*$" , " %1" )) or ' nil'
61
63
end
@@ -205,10 +207,33 @@ function api:cs_last_commit(csname, format)
205
207
return self :cs_commit (csname , ' -1' , format )
206
208
end
207
209
208
- function api :cs_for_commit (csname , rev_spec , format )
210
+ local parse_commit_opts = luakeys .define ({
211
+ rev_spec = { pick = ' string' , default = api :version ().. ' ...HEAD' },
212
+ files = { data_type = ' list' },
213
+ cwd = { data_type = ' string' },
214
+ flags = {
215
+ sub_keys = {
216
+ merges = { data_type = ' boolean' , exclusive_group = ' merges' },
217
+ [' no-merges' ] = { name = ' no-merges' , data_type = ' boolean' , exclusive_group = ' merges' }
218
+ }
219
+ }
220
+ })
221
+ local function parse_flags (flags_table )
222
+ local t = {}
223
+ if flags_table then
224
+ for k ,v in pairs (flags_table ) do
225
+ if v then
226
+ table.insert (t , k )
227
+ end
228
+ end
229
+ end
230
+ return t
231
+ end
232
+ function api :cs_for_commit (csname , args , format )
209
233
if token .is_defined (csname ) then
210
234
local tok = token .create (csname )
211
- local log , err = self .cmd :log (format , rev_spec )
235
+ local opts = parse_commit_opts (args )
236
+ local log , err = self .cmd :log (format , opts .rev_spec , parse_flags (opts .flags ), opts .cwd , opts [' files' ])
212
237
if log then
213
238
for _ , commit in ipairs (log ) do
214
239
tex .print (tok )
0 commit comments