##// END OF EJS Templates
merge with stable
Matt Mackall -
r24163:bb110815 merge default
parent child Browse files
Show More
@@ -102,3 +102,4 b' 6dad422ecc5adb63d9fa649eeb8e05a5f9bc4900'
102 1265a3a71d75396f5d4cf6935ae7d9ba5407a547 0 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
@@ -115,3 +115,4 b' 6dad422ecc5adb63d9fa649eeb8e05a5f9bc4900'
115 1265a3a71d75396f5d4cf6935ae7d9ba5407a547 3.2.4
115 1265a3a71d75396f5d4cf6935ae7d9ba5407a547 3.2.4
116 db8e3f7948b1fdeb9ad12d448fc3525759908b9f 3.3-rc
116 db8e3f7948b1fdeb9ad12d448fc3525759908b9f 3.3-rc
117 fbdd5195528fae4f41feebc1838215c110b25d6a 3.3
117 fbdd5195528fae4f41feebc1838215c110b25d6a 3.3
118 5b4ed033390bf6e2879c8f5c28c84e1ee3b87231 3.3.1
@@ -577,7 +577,7 b' def getstatuswriter(ui, repo, forcibly=N'
577 Otherwise, this returns the function to always write out (or
577 Otherwise, this returns the function to always write out (or
578 ignore if ``not forcibly``) status.
578 ignore if ``not forcibly``) status.
579 '''
579 '''
580 if forcibly is None:
580 if forcibly is None and util.safehasattr(repo, '_largefilesenabled'):
581 return repo._lfstatuswriters[-1]
581 return repo._lfstatuswriters[-1]
582 else:
582 else:
583 if forcibly:
583 if forcibly:
@@ -848,6 +848,9 b' def hgclone(orig, ui, opts, *args, **kwa'
848 return result
848 return result
849
849
850 def overriderebase(orig, ui, repo, **opts):
850 def overriderebase(orig, ui, repo, **opts):
851 if not util.safehasattr(repo, '_largefilesenabled'):
852 return orig(ui, repo, **opts)
853
851 resuming = opts.get('continue')
854 resuming = opts.get('continue')
852 repo._lfcommithooks.append(lfutil.automatedcommithook(resuming))
855 repo._lfcommithooks.append(lfutil.automatedcommithook(resuming))
853 repo._lfstatuswriters.append(lambda *msg, **opts: None)
856 repo._lfstatuswriters.append(lambda *msg, **opts: None)
@@ -24,6 +24,9 b' def reposetup(ui, repo):'
24 return
24 return
25
25
26 class lfilesrepo(repo.__class__):
26 class lfilesrepo(repo.__class__):
27 # the mark to examine whether "repo" object enables largefiles or not
28 _largefilesenabled = True
29
27 lfstatus = False
30 lfstatus = False
28 def status_nolfiles(self, *args, **kwargs):
31 def status_nolfiles(self, *args, **kwargs):
29 return super(lfilesrepo, self).status(*args, **kwargs)
32 return super(lfilesrepo, self).status(*args, **kwargs)
@@ -149,8 +149,8 b' msgid ""'
149 msgstr ""
149 msgstr ""
150 "Project-Id-Version: Mercurial\n"
150 "Project-Id-Version: Mercurial\n"
151 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
151 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
152 "POT-Creation-Date: 2015-01-31 23:43+0900\n"
152 "POT-Creation-Date: 2015-02-28 17:53+0900\n"
153 "PO-Revision-Date: 2015-02-01 08:15+0900\n"
153 "PO-Revision-Date: 2015-03-01 01:23+0900\n"
154 "Last-Translator: Japanese translation team <mercurial-ja@googlegroups.com>\n"
154 "Last-Translator: Japanese translation team <mercurial-ja@googlegroups.com>\n"
155 "Language-Team: Japanese\n"
155 "Language-Team: Japanese\n"
156 "Language: ja\n"
156 "Language: ja\n"
@@ -24938,13 +24938,13 b' msgstr "\xe6\x97\xa7\xe5\xbd\xa2\xe5\xbc\x8f\xe3\x81\xae obsstore \xe3\x81\xa7\xe3\x81\xaf sha256 \xe3\x82\x92\xe6\x89\xb1\xe3\x81\x88\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93"'
24938 msgid "parsing obsolete marker: unknown version %r"
24938 msgid "parsing obsolete marker: unknown version %r"
24939 msgstr "廃止情報解析: 未知のリビジョン %r"
24939 msgstr "廃止情報解析: 未知のリビジョン %r"
24940
24940
24941 msgid "bad obsolescence marker detected: invalid successors nullid"
24942 msgstr "不正な廃止情報を検出: 後継としての null 指定は不正です"
24943
24941 #, python-format
24944 #, python-format
24942 msgid "in-marker cycle with %s"
24945 msgid "in-marker cycle with %s"
24943 msgstr "マーカ %s における循環参照があります"
24946 msgstr "マーカ %s における循環参照があります"
24944
24947
24945 msgid "bad obsolescence marker detected: invalid successors nullid"
24946 msgstr "不正な廃止情報を検出: 後継としての null 指定は不正です"
24947
24948 #, python-format
24948 #, python-format
24949 msgid "unknown key: %r"
24949 msgid "unknown key: %r"
24950 msgstr "未知のキーです: %r"
24950 msgstr "未知のキーです: %r"
@@ -25559,6 +25559,9 b' msgid ""'
25559 "we'll\n"
25559 "we'll\n"
25560 " work around it to return a non-filtered value."
25560 " work around it to return a non-filtered value."
25561 msgstr ""
25561 msgstr ""
25562 " 不可視なリビジョンが該当する場合は、 別な可視リビジョンが無いか、\n"
25563 " ある程度の事後処理が実施されます (※ 訳注: 代替リビジョンの返却は、\n"
25564 " 未保証です)"
25562
25565
25563 #. i18n: "filelog" is a keyword
25566 #. i18n: "filelog" is a keyword
25564 msgid "filelog requires a pattern"
25567 msgid "filelog requires a pattern"
@@ -26990,6 +26993,9 b' msgstr ":rev: \xe6\x95\xb4\xe6\x95\xb0\xe3\x80\x82 \xe5\x90\x84\xe3\x83\xaa\xe3\x83\x9d\xe3\x82\xb8\xe3\x83\x88\xe3\x83\xaa\xe5\x9b\xba\xe6\x9c\x89\xe3\x81\xae\xe3\x83\xaa\xe3\x83\x93\xe3\x82\xb8\xe3\x83\xa7\xe3\x83\xb3\xe7\x95\xaa\xe5\x8f\xb7\xe3\x80\x82"'
26990 msgid ":subrepos: List of strings. Updated subrepositories in the changeset."
26993 msgid ":subrepos: List of strings. Updated subrepositories in the changeset."
26991 msgstr ":subrepos: 文字列挙。 当該リビジョンで更新されたサブリポジトリ名。"
26994 msgstr ":subrepos: 文字列挙。 当該リビジョンで更新されたサブリポジトリ名。"
26992
26995
26996 msgid ":tags: List of strings. Any tags associated with the changeset."
26997 msgstr ":tags: 文字列列挙。 当該リビジョンに付与されたタグの一覧。"
26998
26993 msgid ""
26999 msgid ""
26994 ":parents: List of strings. The parents of the changeset in \"rev:node\"\n"
27000 ":parents: List of strings. The parents of the changeset in \"rev:node\"\n"
26995 " format. If the changeset has only one \"natural\" parent (the "
27001 " format. If the changeset has only one \"natural\" parent (the "
@@ -27591,6 +27597,3 b' msgstr "\xe9\x80\xa3\xe6\x90\xba\xe5\x85\x88\xe3\x81\xa7\xe3\x81\xae\xe5\xa4\x89\xe6\x9b\xb4\xe3\x81\xae\xe6\xa4\x9c\xe7\xb4\xa2"'
27591
27597
27592 msgid "number of cpus must be an integer"
27598 msgid "number of cpus must be an integer"
27593 msgstr "CPU 数には数値を指定してください"
27599 msgstr "CPU 数には数値を指定してください"
27594
27595 msgid ":tags: List of strings. Any tags associated with the changeset."
27596 msgstr ":tags: 文字列列挙。 当該リビジョンに付与されたタグの一覧。"
@@ -25509,14 +25509,14 b' msgstr "n\xc3\xa3o \xc3\xa9 poss\xc3\xadvel lidar com sha256 com o formato obsstore antigo"'
25509 msgid "parsing obsolete marker: unknown version %r"
25509 msgid "parsing obsolete marker: unknown version %r"
25510 msgstr "decodificando marcações de obsolescência: versão desconhecida %r"
25510 msgstr "decodificando marcações de obsolescência: versão desconhecida %r"
25511
25511
25512 msgid "bad obsolescence marker detected: invalid successors nullid"
25513 msgstr ""
25514 "marcação de obsolescência inválida detectada: sucessores nullid inválidos"
25515
25512 #, python-format
25516 #, python-format
25513 msgid "in-marker cycle with %s"
25517 msgid "in-marker cycle with %s"
25514 msgstr "ciclo nos marcadores com %s"
25518 msgstr "ciclo nos marcadores com %s"
25515
25519
25516 msgid "bad obsolescence marker detected: invalid successors nullid"
25517 msgstr ""
25518 "marcação de obsolescência inválida detectada: sucessores nullid inválidos"
25519
25520 #, python-format
25520 #, python-format
25521 msgid "unknown key: %r"
25521 msgid "unknown key: %r"
25522 msgstr "chave desconhecida: %r"
25522 msgstr "chave desconhecida: %r"
@@ -25690,8 +25690,9 b' msgid "killed by signal %d"'
25690 msgstr "morto pelo sinal %d"
25690 msgstr "morto pelo sinal %d"
25691
25691
25692 #, python-format
25692 #, python-format
25693 msgid "unknown strip-bundle2-version value %r; "
25693 msgid "unknown strip-bundle2-version value %r; should be one of %r\n"
25694 msgstr "valor desconhecido de strip-bundle2-version %r; "
25694 msgstr ""
25695 "valor desconhecido de strip-bundle2-version %r; deveria ser um dentre %r\n"
25695
25696
25696 #, python-format
25697 #, python-format
25697 msgid "saved backup bundle to %s\n"
25698 msgid "saved backup bundle to %s\n"
@@ -27610,6 +27611,9 b' msgstr ":rev: Inteiro. O n\xc3\xbamero de ordem da revis\xc3\xa3o no reposit\xc3\xb3rio local."'
27610 msgid ":subrepos: List of strings. Updated subrepositories in the changeset."
27611 msgid ":subrepos: List of strings. Updated subrepositories in the changeset."
27611 msgstr ":subrepos: Lista de strings. Sub-repositórios atualizados na revisão."
27612 msgstr ":subrepos: Lista de strings. Sub-repositórios atualizados na revisão."
27612
27613
27614 msgid ":tags: List of strings. Any tags associated with the changeset."
27615 msgstr ":tags: Lista de strings. Quaisquer etiquetas associadas à revisão."
27616
27613 msgid ""
27617 msgid ""
27614 ":parents: List of strings. The parents of the changeset in \"rev:node\"\n"
27618 ":parents: List of strings. The parents of the changeset in \"rev:node\"\n"
27615 " format. If the changeset has only one \"natural\" parent (the predecessor\n"
27619 " format. If the changeset has only one \"natural\" parent (the predecessor\n"
@@ -28249,6 +28253,3 b' msgstr "o n\xc3\xbamero de cpus deve ser um inteiro"'
28249
28253
28250 #~ msgid "graft for revision %s is empty\n"
28254 #~ msgid "graft for revision %s is empty\n"
28251 #~ msgstr "o enxerto para a revisão %s é vazio\n"
28255 #~ msgstr "o enxerto para a revisão %s é vazio\n"
28252
28253 #~ msgid ":tags: List of strings. Any tags associated with the changeset."
28254 #~ msgstr ":tags: Lista de strings. Quaisquer etiquetas associadas à revisão."
@@ -330,7 +330,7 b' class revbranchcache(object):'
330 and will grow with it but be 1/8th of its size.
330 and will grow with it but be 1/8th of its size.
331 """
331 """
332
332
333 def __init__(self, repo):
333 def __init__(self, repo, readonly=True):
334 assert repo.filtername is None
334 assert repo.filtername is None
335 self._names = [] # branch names in local encoding with static index
335 self._names = [] # branch names in local encoding with static index
336 self._rbcrevs = array('c') # structs of type _rbcrecfmt
336 self._rbcrevs = array('c') # structs of type _rbcrecfmt
@@ -342,6 +342,10 b' class revbranchcache(object):'
342 except (IOError, OSError), inst:
342 except (IOError, OSError), inst:
343 repo.ui.debug("couldn't read revision branch cache names: %s\n" %
343 repo.ui.debug("couldn't read revision branch cache names: %s\n" %
344 inst)
344 inst)
345 if readonly:
346 # don't try to use cache - fall back to the slow path
347 self.branchinfo = self._branchinfo
348
345 if self._names:
349 if self._names:
346 try:
350 try:
347 data = repo.vfs.read(_rbcrevs)
351 data = repo.vfs.read(_rbcrevs)
@@ -227,6 +227,9 b' def _runcatch(req):'
227 except (AttributeError, IndexError):
227 except (AttributeError, IndexError):
228 # it might be anything, for example a string
228 # it might be anything, for example a string
229 reason = inst.reason
229 reason = inst.reason
230 if isinstance(reason, unicode):
231 # SSLError of Python 2.7.9 contains a unicode
232 reason = reason.encode(encoding.encoding, 'replace')
230 ui.warn(_("abort: error: %s\n") % reason)
233 ui.warn(_("abort: error: %s\n") % reason)
231 elif (util.safehasattr(inst, "args")
234 elif (util.safehasattr(inst, "args")
232 and inst.args and inst.args[0] == errno.EPIPE):
235 and inst.args and inst.args[0] == errno.EPIPE):
@@ -41,7 +41,8 b' class namespaces(object):'
41 # i18n: column positioning for "hg log"
41 # i18n: column positioning for "hg log"
42 logfmt=_("tag: %s\n"),
42 logfmt=_("tag: %s\n"),
43 listnames=tagnames,
43 listnames=tagnames,
44 namemap=tagnamemap, nodemap=tagnodemap)
44 namemap=tagnamemap, nodemap=tagnodemap,
45 deprecated=set(['tip']))
45 self.addnamespace(n)
46 self.addnamespace(n)
46
47
47 bnames = lambda repo: repo.branchmap().keys()
48 bnames = lambda repo: repo.branchmap().keys()
@@ -126,11 +127,13 b' class namespace(object):'
126 dictionary)
127 dictionary)
127 'namemap': function that takes a name and returns a list of nodes
128 'namemap': function that takes a name and returns a list of nodes
128 'nodemap': function that takes a node and returns a list of names
129 'nodemap': function that takes a node and returns a list of names
130 'deprecated': set of names to be masked for ordinary use
129
131
130 """
132 """
131
133
132 def __init__(self, name, templatename=None, logname=None, colorname=None,
134 def __init__(self, name, templatename=None, logname=None, colorname=None,
133 logfmt=None, listnames=None, namemap=None, nodemap=None):
135 logfmt=None, listnames=None, namemap=None, nodemap=None,
136 deprecated=None):
134 """create a namespace
137 """create a namespace
135
138
136 name: the namespace to be registered (in plural form)
139 name: the namespace to be registered (in plural form)
@@ -144,6 +147,7 b' class namespace(object):'
144 listnames: function to list all names
147 listnames: function to list all names
145 namemap: function that inputs a node, output name(s)
148 namemap: function that inputs a node, output name(s)
146 nodemap: function that inputs a name, output node(s)
149 nodemap: function that inputs a name, output node(s)
150 deprecated: set of names to be masked for ordinary use
147
151
148 """
152 """
149 self.name = name
153 self.name = name
@@ -168,6 +172,11 b' class namespace(object):'
168 # i18n: column positioning for "hg log"
172 # i18n: column positioning for "hg log"
169 self.logfmt = ("%s:" % self.logname).ljust(13) + "%s\n"
173 self.logfmt = ("%s:" % self.logname).ljust(13) + "%s\n"
170
174
175 if deprecated is None:
176 self.deprecated = set()
177 else:
178 self.deprecated = deprecated
179
171 def names(self, repo, node):
180 def names(self, repo, node):
172 """method that returns a (sorted) list of names in a namespace that
181 """method that returns a (sorted) list of names in a namespace that
173 match a given node"""
182 match a given node"""
@@ -274,7 +274,8 b' class repoview(object):'
274 unfichangelog = unfi.changelog
274 unfichangelog = unfi.changelog
275 revs = filterrevs(unfi, self.filtername)
275 revs = filterrevs(unfi, self.filtername)
276 cl = self._clcache
276 cl = self._clcache
277 newkey = (len(unfichangelog), unfichangelog.tip(), hash(revs))
277 newkey = (len(unfichangelog), unfichangelog.tip(), hash(revs),
278 unfichangelog._delayed)
278 if cl is not None:
279 if cl is not None:
279 # we need to check curkey too for some obscure reason.
280 # we need to check curkey too for some obscure reason.
280 # MQ test show a corruption of the underlying repo (in _clcache)
281 # MQ test show a corruption of the underlying repo (in _clcache)
@@ -282,7 +283,7 b' class repoview(object):'
282 oldfilter = cl.filteredrevs
283 oldfilter = cl.filteredrevs
283 try:
284 try:
284 cl.filteredrevs = () # disable filtering for tip
285 cl.filteredrevs = () # disable filtering for tip
285 curkey = (len(cl), cl.tip(), hash(oldfilter))
286 curkey = (len(cl), cl.tip(), hash(oldfilter), cl._delayed)
286 finally:
287 finally:
287 cl.filteredrevs = oldfilter
288 cl.filteredrevs = oldfilter
288 if newkey != self._clcachekey or newkey != curkey:
289 if newkey != self._clcachekey or newkey != curkey:
@@ -527,7 +527,7 b' def branch(repo, subset, x):'
527 import branchmap
527 import branchmap
528 urepo = repo.unfiltered()
528 urepo = repo.unfiltered()
529 ucl = urepo.changelog
529 ucl = urepo.changelog
530 getbi = branchmap.revbranchcache(urepo).branchinfo
530 getbi = branchmap.revbranchcache(urepo, readonly=True).branchinfo
531
531
532 try:
532 try:
533 b = getstring(x, '')
533 b = getstring(x, '')
@@ -1277,7 +1277,8 b' def named(repo, subset, x):'
1277 names = set()
1277 names = set()
1278 for ns in namespaces:
1278 for ns in namespaces:
1279 for name in ns.listnames(repo):
1279 for name in ns.listnames(repo):
1280 names.update(repo[n].rev() for n in ns.nodes(repo, name))
1280 if name not in ns.deprecated:
1281 names.update(repo[n].rev() for n in ns.nodes(repo, name))
1281
1282
1282 names -= set([node.nullrev])
1283 names -= set([node.nullrev])
1283 return subset & names
1284 return subset & names
@@ -199,10 +199,10 b' def showbookmarks(**args):'
199 """
199 """
200 repo = args['ctx']._repo
200 repo = args['ctx']._repo
201 bookmarks = args['ctx'].bookmarks()
201 bookmarks = args['ctx'].bookmarks()
202 hybrid = showlist('bookmark', bookmarks, **args)
202 current = repo._bookmarkcurrent
203 for value in hybrid.values:
203 c = [{'bookmark': x, 'current': current} for x in bookmarks]
204 value['current'] = repo._bookmarkcurrent
204 f = _showlist('bookmark', bookmarks, **args)
205 return hybrid
205 return _hybrid(f, c, lambda x: x['bookmark'])
206
206
207 def showchildren(**args):
207 def showchildren(**args):
208 """:children: List of strings. The children of the changeset."""
208 """:children: List of strings. The children of the changeset."""
@@ -720,7 +720,9 b' def copyfile(src, dest, hardlink=False):'
720 "copy a file, preserving mode and atime/mtime"
720 "copy a file, preserving mode and atime/mtime"
721 if os.path.lexists(dest):
721 if os.path.lexists(dest):
722 unlink(dest)
722 unlink(dest)
723 if hardlink:
723 # hardlinks are problematic on CIFS, quietly ignore this flag
724 # until we find a way to work around it cleanly (issue4546)
725 if False or hardlink:
724 try:
726 try:
725 oslink(src, dest)
727 oslink(src, dest)
726 return
728 return
@@ -2381,6 +2381,11 b' Test current bookmark templating'
2381 2
2381 2
2382 1
2382 1
2383 0
2383 0
2384 $ hg book -r1 baz
2385 $ hg log --template "{rev} {join(bookmarks, ' ')}\n"
2386 2 bar foo
2387 1 baz
2388 0
2384
2389
2385 Test stringify on sub expressions
2390 Test stringify on sub expressions
2386
2391
@@ -179,7 +179,7 b' Test pre-72a89cf86fcd backward compatibi'
179 TODO
179 TODO
180 #else
180 #else
181 $ hg --debug odd | grep '^running'
181 $ hg --debug odd | grep '^running'
182 running "*/bin/echo --foo='sp ace' 'sp ace' --bar='sp ace' 'sp ace'" in * (glob)
182 running "*/echo --foo='sp ace' 'sp ace' --bar='sp ace' 'sp ace'" in * (glob)
183 #endif
183 #endif
184
184
185 Empty argument must be quoted
185 Empty argument must be quoted
@@ -915,6 +915,77 b' locally (issue4109)'
915 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
915 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
916 #endif
916 #endif
917
917
918 Test overridden functions work correctly even for repos disabling
919 largefiles (issue4547)
920
921 $ hg showconfig extensions | grep largefiles
922 extensions.largefiles=!
923
924 (test updating implied by clone)
925
926 $ hg init enabled-but-no-largefiles
927 $ echo normal1 > enabled-but-no-largefiles/normal1
928 $ hg -R enabled-but-no-largefiles add enabled-but-no-largefiles/normal1
929 $ hg -R enabled-but-no-largefiles commit -m '#0@enabled-but-no-largefiles'
930 Invoking status precommit hook
931 A normal1
932 $ cat >> enabled-but-no-largefiles/.hg/hgrc <<EOF
933 > [extensions]
934 > # enable locally
935 > largefiles=
936 > EOF
937 $ hg clone -q enabled-but-no-largefiles no-largefiles
938
939 (test rebasing implied by pull: precommit while rebasing unexpectedly
940 shows "normal3" as "?", because lfdirstate isn't yet written out at
941 that time)
942
943 $ echo normal2 > enabled-but-no-largefiles/normal2
944 $ hg -R enabled-but-no-largefiles add enabled-but-no-largefiles/normal2
945 $ hg -R enabled-but-no-largefiles commit -m '#1@enabled-but-no-largefiles'
946 Invoking status precommit hook
947 A normal2
948
949 $ echo normal3 > no-largefiles/normal3
950 $ hg -R no-largefiles add no-largefiles/normal3
951 $ hg -R no-largefiles commit -m '#1@no-largefiles'
952 Invoking status precommit hook
953 A normal3
954
955 $ hg -R no-largefiles -q pull --rebase
956 Invoking status precommit hook
957 ? normal3
958
959 (test reverting)
960
961 $ hg init subrepo-root
962 $ cat >> subrepo-root/.hg/hgrc <<EOF
963 > [extensions]
964 > # enable locally
965 > largefiles=
966 > EOF
967 $ echo large > subrepo-root/large
968 $ hg -R subrepo-root add --large subrepo-root/large
969 $ hg clone -q no-largefiles subrepo-root/no-largefiles
970 $ cat > subrepo-root/.hgsub <<EOF
971 > no-largefiles = no-largefiles
972 > EOF
973 $ hg -R subrepo-root add subrepo-root/.hgsub
974 $ hg -R subrepo-root commit -m '#0'
975 Invoking status precommit hook
976 A .hgsub
977 A large
978 ? .hgsubstate
979 $ echo dirty >> subrepo-root/large
980 $ echo dirty >> subrepo-root/no-largefiles/normal1
981 $ hg -R subrepo-root status -S
982 M large
983 M no-largefiles/normal1
984 $ hg -R subrepo-root revert --all
985 reverting subrepo-root/.hglf/large (glob)
986 reverting subrepo no-largefiles
987 reverting subrepo-root/no-largefiles/normal1 (glob)
988
918 $ cd ..
989 $ cd ..
919
990
920
991
@@ -791,7 +791,6 b' we can use patterns when searching for t'
791 6
791 6
792 $ log 'named("tags")'
792 $ log 'named("tags")'
793 6
793 6
794 9
795
794
796 issue2437
795 issue2437
797
796
General Comments 0
You need to be logged in to leave comments. Login now