comparison mercurial/cmdutil.py @ 24062:f576addb5b77

log: extract common part from getgraphlogrevs() and getlogrevs()
author Yuya Nishihara <yuya@tcha.org>
date Fri, 06 Feb 2015 00:15:35 +0900
parents 4fa72a09c73d
children c98fa0ca4678
comparison
equal deleted inserted replaced
24061:4fa72a09c73d 24062:f576addb5b77
1820 expr = '(' + ' and '.join(expr) + ')' 1820 expr = '(' + ' and '.join(expr) + ')'
1821 else: 1821 else:
1822 expr = None 1822 expr = None
1823 return expr, filematcher 1823 return expr, filematcher
1824 1824
1825 def _logrevs(repo, opts):
1826 # Default --rev value depends on --follow but --follow behaviour
1827 # depends on revisions resolved from --rev...
1828 follow = opts.get('follow') or opts.get('follow_first')
1829 if opts.get('rev'):
1830 revs = scmutil.revrange(repo, opts['rev'])
1831 elif follow:
1832 revs = repo.revs('reverse(:.)')
1833 else:
1834 revs = revset.spanset(repo)
1835 revs.reverse()
1836 return revs
1837
1825 def getgraphlogrevs(repo, pats, opts): 1838 def getgraphlogrevs(repo, pats, opts):
1826 """Return (revs, expr, filematcher) where revs is an iterable of 1839 """Return (revs, expr, filematcher) where revs is an iterable of
1827 revision numbers, expr is a revset string built from log options 1840 revision numbers, expr is a revset string built from log options
1828 and file patterns or None, and used to filter 'revs'. If --stat or 1841 and file patterns or None, and used to filter 'revs'. If --stat or
1829 --patch are not passed filematcher is None. Otherwise it is a 1842 --patch are not passed filematcher is None. Otherwise it is a
1830 callable taking a revision number and returning a match objects 1843 callable taking a revision number and returning a match objects
1831 filtering the files to be detailed when displaying the revision. 1844 filtering the files to be detailed when displaying the revision.
1832 """ 1845 """
1833 limit = loglimit(opts) 1846 limit = loglimit(opts)
1834 # Default --rev value depends on --follow but --follow behaviour 1847 revs = _logrevs(repo, opts)
1835 # depends on revisions resolved from --rev...
1836 follow = opts.get('follow') or opts.get('follow_first')
1837 if opts.get('rev'):
1838 revs = scmutil.revrange(repo, opts['rev'])
1839 else:
1840 if follow:
1841 revs = repo.revs('reverse(:.)')
1842 else:
1843 revs = revset.spanset(repo)
1844 revs.reverse()
1845 if not revs: 1848 if not revs:
1846 return revset.baseset(), None, None 1849 return revset.baseset(), None, None
1847 expr, filematcher = _makelogrevset(repo, pats, opts, revs) 1850 expr, filematcher = _makelogrevset(repo, pats, opts, revs)
1848 if opts.get('rev'): 1851 if opts.get('rev'):
1849 # User-specified revs might be unsorted, but don't sort before 1852 # User-specified revs might be unsorted, but don't sort before
1876 --patch are not passed filematcher is None. Otherwise it is a 1879 --patch are not passed filematcher is None. Otherwise it is a
1877 callable taking a revision number and returning a match objects 1880 callable taking a revision number and returning a match objects
1878 filtering the files to be detailed when displaying the revision. 1881 filtering the files to be detailed when displaying the revision.
1879 """ 1882 """
1880 limit = loglimit(opts) 1883 limit = loglimit(opts)
1881 # Default --rev value depends on --follow but --follow behaviour 1884 revs = _logrevs(repo, opts)
1882 # depends on revisions resolved from --rev...
1883 follow = opts.get('follow') or opts.get('follow_first')
1884 if opts.get('rev'):
1885 revs = scmutil.revrange(repo, opts['rev'])
1886 elif follow:
1887 revs = repo.revs('reverse(:.)')
1888 else:
1889 revs = revset.spanset(repo)
1890 revs.reverse()
1891 if not revs: 1885 if not revs:
1892 return revset.baseset([]), None, None 1886 return revset.baseset([]), None, None
1893 expr, filematcher = _makelogrevset(repo, pats, opts, revs) 1887 expr, filematcher = _makelogrevset(repo, pats, opts, revs)
1894 if expr: 1888 if expr:
1895 # Revset matchers often operate faster on revisions in changelog 1889 # Revset matchers often operate faster on revisions in changelog