sapling icon indicating copy to clipboard operation
sapling copied to clipboard

filelog() and file() revsets are broken

Open strager opened this issue 1 year ago • 2 comments

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.

strager avatar Mar 24 '23 06:03 strager

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

strager avatar Mar 24 '23 06:03 strager

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.

quark-zju avatar Apr 17 '23 02:04 quark-zju