sapling
sapling copied to clipboard
filelog() and file() revsets are broken
The filelog(pattern) and file(pattern) revsets are documented but both seem to not work (in different ways):
$ # filelog() crashes:
$ ./sl log -r 'filelog(CMakeLists.txt)'
** Sapling SCM (version 4.4.2_20230323_221729_2d2c96b796d0) has crashed:
Traceback (most recent call last):
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/__init__.py", line 106, in run
dispatch.run(args, fin, fout, ferr, config)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/dispatch.py", line 161, in run
status = (dispatch(req) or 0) & 255
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/dispatch.py", line 499, in dispatch
ret = _runcatch(req)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/dispatch.py", line 687, in _runcatch
return _callcatch(ui, req, _runcatchfunc)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/dispatch.py", line 696, in _callcatch
return scmutil.callcatch(ui, req, func)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/scmutil.py", line 143, in callcatch
return func()
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/dispatch.py", line 670, in _runcatchfunc
return _dispatch(req)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/dispatch.py", line 1197, in _dispatch
ret = runcommand(
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/ext/undo.py", line 148, in _runcommandwrapper
result = orig(lui, repo, cmd, fullargs, *args)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/ext/journal.py", line 80, in runcommand
return orig(lui, repo, cmd, fullargs, *args)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/ext/sparse.py", line 478, in _tracktelemetry
res = runcommand(lui, repo, *args)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/ext/copytrace.py", line 164, in _runcommand
return orig(lui, repo, cmd, fullargs, ui, *args, **kwargs)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/dispatch.py", line 886, in runcommand
ret = _runcommand(ui, options, cmd, d)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/dispatch.py", line 1238, in _runcommand
return cmdfunc()
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/dispatch.py", line 1196, in <lambda>
d = lambda: util.checksignature(func)(ui, *args, **strcmdopt)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/util.py", line 1374, in check
return func(*args, **kwargs)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/util.py", line 1374, in check
return func(*args, **kwargs)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/ext/remotenames.py", line 593, in exlog
res = orig(ui, repo, *args, **opts)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/util.py", line 1374, in check
return func(*args, **kwargs)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/util.py", line 1374, in check
return func(*args, **kwargs)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/ext/tweakdefaults.py", line 638, in log
return orig(ui, repo, *pats, **opts)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/util.py", line 1374, in check
return func(*args, **kwargs)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/util.py", line 1374, in check
return func(*args, **kwargs)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/ext/remotefilelog/__init__.py", line 865, in log
return orig(ui, repo, *pats, **opts)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/util.py", line 1374, in check
return func(*args, **kwargs)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/commands/__init__.py", line 4140, in log
revs, expr, filematcher = cmdutil.getlogrevs(repo, pats, opts)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/cmdutil.py", line 3014, in getlogrevs
revs = _logrevs(repo, opts)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/ext/sparse.py", line 456, in _logrevs
revs = orig(repo, opts)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/cmdutil.py", line 2955, in _logrevs
revs = scmutil.revrange(repo, opts["rev"])
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/scmutil.py", line 607, in revrange
return repo.anyrevs(allspecs, user=True, localalias=localalias)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/localrepo.py", line 1475, in anyrevs
return m(self)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/revset.py", line 2820, in mfunc
return getset(repo, subset, tree, order)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/revset.py", line 105, in getset
return methods[x[0]](repo, subset, *x[1:], order=order)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/revset.py", line 360, in func
return func(repo, subset, b)
File "/Users/strager/tmp/Projects/sapling/eden/scm/edenscm/revset.py", line 1167, in filelog
for fr in list(fl):
TypeError: 'gitfilelog' object is not iterable
$ # file() gives no output:
$ ./sl log -r 'file(CMakeLists.txt)'
Tested on commit 2d2c96b796d0d2e8a5e60ce2a77759411d552444 on macOS.
This might be related (found by @Vegerot) at least for file(): https://github.com/vegerot/sapling/blob/49d5c4f0962366ed85f7afe5bb27fc7510632ffe/eden/scm/lib/hgcommits/src/git.rs#L453
In Git we only support pathhistory for logging file history. You can find out the underlying revset used by the log command via:
EDENSCM_LOG=log::makelogrevset=debug sl log FILE
The filelog
is a concept that only exists in Mercurial. So it might make sense to disable it for Git. The file()
revset seems fixable, though. I commented on #582.