Mercurial > hg
view mercurial/templates/json/map @ 39820:68ea1f8dcb84
py3: proxy posixfile objects to re-add a useful 'name' attribute on Windows
This file object is used in the vfs layer, so there are many errors like this:
...
File "mercurial\localrepo.py", line 2569, in savecommitmessage
return self.pathto(fp.name[len(self.root) + 1:])
TypeError: 'int' object is not subscriptable
It looks like the 'name' value is actually the fileno() value, and the
documentation says the name parameter to PyFile_FromFd() is ignored. [1] I
tried just assigning the attribute after osutil.posixfile() returns, but that
crashes saying that it's read-only.
[1] https://docs.python.org/3.6/c-api/file.html
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 21 Sep 2018 20:03:07 -0400 |
parents | 1a786fe069b8 |
children | 6feaee05bac5 |
line wrap: on
line source
default = 'shortlog' mimetype = 'application/json' filerevision = '\{ "node": {node|json}, "path": {file|json}, "date": {date|json}, "desc": {desc|utf8|json}, "branch": {if(branch, branch%changesetbranch, "default"|json)}, "bookmarks": [{join(bookmarks%changelistentryname, ", ")}], "tags": [{join(tags%changelistentryname, ", ")}], "user": {author|utf8|json}, "parents": [{join(parent%changesetparent, ", ")}], "phase": {phase|json}, "lines": [{join(text%lineentry, ", ")}] }' lineentry = '\{ "line": {line|json} }' search = '\{ "node": {node|json}, "query": {query|json}, "entries": [{join(entries%changelistentry, ", ")}] }' # changelog and shortlog are the same web API but with different # number of entries. changelog = changelist.tmpl shortlog = changelist.tmpl graph = graph.tmpl changelistentry = '\{ "node": {node|json}, "date": {date|json}, "desc": {desc|utf8|json}, "branch": {if(branch, branch%changesetbranch, "default"|json)}, "bookmarks": [{join(bookmarks%changelistentryname, ", ")}], "tags": [{join(tags%changelistentryname, ", ")}], "user": {author|utf8|json}, "phase": {phase|json}, "parents": [{if(allparents, join(allparents%changesetparent, ", "), join(parent%changesetparent, ", "))}] }' graphentry = '\{ "node": {node|json}, "date": {date|json}, "desc": {desc|utf8|json}, "branch": {if(branch, branch%changesetbranch, "default"|json)}, "bookmarks": [{join(bookmarks%changelistentryname, ", ")}], "tags": [{join(tags%changelistentryname, ", ")}], "user": {author|utf8|json}, "phase": {phase|json}, "col": {col|json}, "row": {row|json}, "color": {color|json}, "edges": {edges|json}, "parents": [{if(allparents, join(allparents%changesetparent, ", "), join(parent%changesetparent, ", "))}] }' changelistentryname = '{name|utf8|json}' changeset = '\{ "node": {node|json}, "date": {date|json}, "desc": {desc|utf8|json}, "branch": {if(branch, branch%changesetbranch, "default"|json)}, "bookmarks": [{join(changesetbookmark, ", ")}], "tags": [{join(changesettag, ", ")}], "user": {author|utf8|json}, "parents": [{join(parent%changesetparent, ", ")}], "phase": {phase|json} }' changesetbranch = '{name|utf8|json}' changesetbookmark = '{bookmark|utf8|json}' changesettag = '{tag|utf8|json}' changesetparent = '{node|json}' manifest = '\{ "node": {node|json}, "abspath": {path|json}, "directories": [{join(dentries%direntry, ", ")}], "files": [{join(fentries%fileentry, ", ")}], "bookmarks": [{join(bookmarks%name, ", ")}], "tags": [{join(tags%name, ", ")}] }' name = '{name|utf8|json}' direntry = '\{ "abspath": {path|json}, "basename": {basename|json}, "emptydirs": {emptydirs|json} }' fileentry = '\{ "abspath": {file|json}, "basename": {basename|json}, "date": {date|json}, "size": {size|json}, "flags": {permissions|json} }' tags = '\{ "node": {node|json}, "tags": [{join(entriesnotip%tagentry, ", ")}] }' tagentry = '\{ "tag": {tag|utf8|json}, "node": {node|json}, "date": {date|json} }' bookmarks = '\{ "node": {node|json}, "bookmarks": [{join(entries%bookmarkentry, ", ")}] }' bookmarkentry = '\{ "bookmark": {bookmark|utf8|json}, "node": {node|json}, "date": {date|json} }' branches = '\{ "branches": [{join(entries%branchentry, ", ")}] }' branchentry = '\{ "branch": {branch|utf8|json}, "node": {node|json}, "date": {date|json}, "status": {status|json} }' shortlogentry = '{changelistentry}' summary = '\{ "node": {node|json}, "lastchange": {lastchange|json}, "bookmarks": [{join(bookmarks%bookmarkentry, ", ")}], "branches": [{join(branches%branchentry, ", ")}], "shortlog": [{join(shortlog%shortlogentry, ", ")}], "tags": [{join(tags%tagentry, ", ")}], "archives": [{join(archives%archiveentry, ", ")}], "labels": {labels|json} }' archiveentry = '\{ "node": {node|json}, "extension": {extension|json}, "type": {type|json}, "url": {"{urlbase}{url}archive/{node}{extension}"|json} }' filediff = '\{ "path": {file|json}, "node": {node|json}, "date": {date|json}, "desc": {desc|utf8|json}, "author": {author|utf8|json}, "parents": [{join(parent%changesetparent, ", ")}], "children": [{join(child%changesetparent, ", ")}], "diff": [{join(diff, ", ")}] }' diffblock = '\{ "blockno": {blockno|json}, "lines": [{join(lines, ", ")}] }' difflineplus = '\{ "t": "+", "n": {lineno|json}, "l": {line|json} }' difflineminus = '\{ "t": "-", "n": {lineno|json}, "l": {line|json} }' difflineat = '\{ "t": "@", "n": {lineno|json}, "l": {line|json} }' diffline = '\{ "t": "", "n": {lineno|json}, "l": {line|json} }' filecomparison = '\{ "path": {file|json}, "node": {node|json}, "date": {date|json}, "desc": {desc|utf8|json}, "author": {author|utf8|json}, "parents": [{join(parent%changesetparent, ", ")}], "children": [{join(child%changesetparent, ", ")}], "leftnode": {leftnode|json}, "rightnode": {rightnode|json}, "comparison": [{join(comparison, ", ")}] }' comparisonblock = '\{ "lines": [{join(lines, ", ")}] }' comparisonline = '\{ "t": {type|json}, "ln": {leftlineno|json}, "ll": {leftline|json}, "rn": {rightlineno|json}, "rl": {rightline|json} }' fileannotate = '\{ "abspath": {file|json}, "node": {node|json}, "author": {author|utf8|json}, "date": {date|json}, "desc": {desc|utf8|json}, "parents": [{join(parent%changesetparent, ", ")}], "children": [{join(child%changesetparent, ", ")}], "permissions": {permissions|json}, "annotate": [{join(annotate%fileannotation, ", ")}] }' fileannotation = '\{ "node": {node|json}, "author": {author|utf8|json}, "desc": {desc|utf8|json}, "abspath": {file|json}, "targetline": {targetline|json}, "line": {line|json}, "lineno": {lineno|json}, "revdate": {revdate|json} }' filelog = '\{ "entries": [{join(entries%changelistentry, ", ")}] }' helptopics = '\{ "topics": [{join(topics%helptopicentry, ", ")}], "earlycommands": [{join(earlycommands%helptopicentry, ", ")}], "othercommands": [{join(othercommands%helptopicentry, ", ")}] }' helptopicentry = '\{ "topic": {topic|utf8|json}, "summary": {summary|utf8|json} }' help = '\{ "topic": {topic|utf8|json}, "rawdoc": {doc|utf8|json} }' filenodelink = '' filenolink = '' index = '\{ "entries": [{join(entries%indexentry, ", ")}] }' indexentry = '\{ "name": {name|utf8|json}, "description": {description|utf8|json}, "contact": {contact|utf8|json}, "lastchange": {lastchange|json}, "labels": {labels|json} }' error = '\{ "error": {error|utf8|json} }'