p4fastimport: fix ignored executable bits

Differential Revision: https://phab.mercurial-scm.org/D1912

fbshipit-source-id: 8972a19eb3faa7aeb91bf9a341702a7afffc7e63
This commit is contained in:
Hollis Blanchard 2018-01-23 12:09:08 -08:00 committed by Saurabh Singh
parent 9fde63a970
commit 5d56308d7e
4 changed files with 68 additions and 14 deletions

View File

@ -326,6 +326,30 @@ class P4Filelog(object):
self._data = data
self._depotfile = depotfile
# used in Perforce prior to 99.1
self._keyword_to_typemod = {
'text': ('text', ''),
'xtext': ('text', 'x'),
'ktext': ('text', 'k'),
'kxtext': ('text', 'kx'),
'binary': ('binary', ''),
'xbinary': ('binary', 'x'),
'ctext': ('text', 'C'),
'cxtext': ('text', 'Cx'),
'symlink': ('symlink', ''),
'resource': ('resource', ''),
'uresource': ('resource', 'F'),
'ltext': ('text', 'F'),
'xltext': ('text', 'Fx'),
'ubinary': ('binary', 'F'),
'uxbinary': ('binary', 'Fx'),
'tempobj': ('binary', 'FSw'),
'ctempobj': ('binary', 'Sw'),
'xtempobj': ('binary', 'FSwx'),
'xunicode': ('unicode', 'x'),
'xutf16': ('utf16', 'x'),
}
# @property
# def branchcl(self):
# return self._parsed[1]
@ -354,21 +378,33 @@ class P4Filelog(object):
def revisions(self):
return sorted(self._data.keys())
def _get_type_modifiers(self, filetype):
try:
filetype, modifiers = self._keyword_to_typemod[filetype]
except KeyError:
filetype, plus, modifiers = filetype.partition('+')
return filetype, modifiers
def _get_type(self, filetype):
return self._get_type_modifiers(filetype)[0]
def _get_modifiers(self, filetype):
return self._get_type_modifiers(filetype)[1]
def isdeleted(self, clnum):
return self._data[clnum]['action'] in ['move/delete', 'delete']
def isexec(self, clnum):
t = self._data[clnum]['type']
return 'xtext' == t or '+x' in t
return 'x' in self._get_modifiers(t)
def issymlink(self, clnum):
t = self._data[clnum]['type']
return 'symlink' in t
return 'symlink' == self._get_type(t)
def iskeyworded(self, clnum):
t = self._data[clnum]['type']
return (re.compile('kx?text').match(t) or
re.compile('\+kx?').search(t)) is not None
return 'k' in self._get_modifiers(t)
ACTION_EDIT = ['edit', 'integrate']
ACTION_ADD = ['add', 'branch', 'move/add']

View File

@ -49,6 +49,7 @@ Simple import
$ cd $hgwd
$ hg init --config 'format.usefncache=False'
$ hg p4fastimport --debug -P $P4ROOT hg-p4-import
updating the branch cache (?)
loading changelist numbers.
2 changelists to import.
loading list of files.
@ -70,7 +71,7 @@ Simple import
changelist 2: writing manifest. node: 31c95d82cc49 p1: 0637b0361958 p2: 000000000000 linkrev: 1
changelist 2: writing changelog: second
writing lfs metadata to sqlite
updating the branch cache (?)
updating the branch cache
2 revision(s), 3 file(s) imported.
Verify

View File

@ -48,6 +48,7 @@ Simple import
$ cd $hgwd
$ hg init --config 'format.usefncache=False'
$ hg p4fastimport --debug -P $P4ROOT hg-p4-import
updating the branch cache (?)
loading changelist numbers.
2 changelists to import.
loading list of files.
@ -60,10 +61,9 @@ Simple import
writing filelog: a80d06849b33, p1 b789fdd96dc2, linkrev 1, 4 bytes, src: *, path: Main/a (glob)
writing filelog: 149da44f2a4e, p1 000000000000, linkrev 0, 2 bytes, src: *, path: Main/b/c (glob)
writing filelog: b11e10a88bfa, p1 149da44f2a4e, linkrev 1, 4 bytes, src: *, path: Main/b/c (glob)
updating the branch cache (?)
writing filelog: ee08366a1a83, p1 000000000000, linkrev 0, 44 bytes, src: rcs, path: Main/largefile
writing filelog: ee08366a1a83, p1 000000000000, linkrev 0, 44 bytes, src: *, path: Main/largefile (glob)
largefile: Main/largefile, oid: dde0d1d11f099d6572fa47fcbd1cae324aeaad7409cb107461b09ba4eb2177ac
writing filelog: a33f052256c3, p1 ee08366a1a83, linkrev 1, 88 bytes, src: rcs, path: Main/largefile
writing filelog: a33f052256c3, p1 ee08366a1a83, linkrev 1, 88 bytes, src: *, path: Main/largefile (glob)
largefile: Main/largefile, oid: 595efb640da040786d840fbae4675925fd4621f3498b849744ce0d4446674e3f
changelist 1: writing manifest. node: e970866c1151 p1: 000000000000 p2: 000000000000 linkrev: 0
changelist 1: writing changelog: initial

View File

@ -37,6 +37,14 @@ populate the depot
edit //depot/Main/b/c#2
edit //depot/Main/d#2
Change 2 submitted.
$ echo "full-exec" > Main/full-exec
$ p4 add -t text+Fx Main/full-exec
//depot/Main/full-exec#1 - opened for add
$ p4 submit -d third
Submitting change 3.
Locking 1 files ...
add //depot/Main/full-exec#1
Change 3 submitted.
Simple import
@ -44,26 +52,31 @@ Simple import
$ hg init --config 'format.usefncache=False'
$ hg p4fastimport --debug -P $P4ROOT hg-p4-import
loading changelist numbers.
2 changelists to import.
updating the branch cache (?)
updating the branch cache (?)
3 changelists to import.
loading list of files.
3 files to import.
4 files to import.
reading filelog * (glob)
reading filelog * (glob)
reading filelog * (glob)
reading filelog * (glob)
importing repository.
writing filelog: b789fdd96dc2, p1 000000000000, linkrev 0, 2 bytes, src: *, path: Main/a (glob)
writing filelog: a80d06849b33, p1 b789fdd96dc2, linkrev 1, 4 bytes, src: *, path: Main/a (glob)
updating the branch cache (?)
writing filelog: 1f6b5bb93f1d, p1 000000000000, linkrev 0, 4 bytes, src: *, path: Main/b/c (glob)
writing filelog: c29ae1cbd245, p1 1f6b5bb93f1d, linkrev 1, 2 bytes, src: *, path: Main/b/c (glob)
writing filelog: a9092a3d84a3, p1 000000000000, linkrev 0, 2 bytes, src: *, path: Main/d (glob)
writing filelog: f83f0637e55e, p1 a9092a3d84a3, linkrev 1, 4 bytes, src: *, path: Main/d (glob)
writing filelog: f011293652b8, p1 000000000000, linkrev 2, 10 bytes, src: *, path: Main/full-exec (glob)
changelist 1: writing manifest. node: 05414d16d473 p1: 000000000000 p2: 000000000000 linkrev: 0
changelist 1: writing changelog: initial
changelist 2: writing manifest. node: 9408cdd6d4f7 p1: 05414d16d473 p2: 000000000000 linkrev: 1
changelist 2: writing changelog: second
updating the branch cache (?)
2 revision(s), 3 file(s) imported.
changelist 3: writing manifest. node: c3be37ee7f64 p1: 9408cdd6d4f7 p2: 000000000000 linkrev: 2
changelist 3: writing changelog: third
updating the branch cache
3 revision(s), 4 file(s) imported.
Verify
@ -72,7 +85,7 @@ Verify
checking manifests
crosschecking files in changesets and manifests
checking files
3 files, 2 changesets, 6 total revisions
4 files, 3 changesets, 7 total revisions
$ hg update 0
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
@ -92,6 +105,10 @@ Verify
c29ae1cbd245c01122ab671684e87b26183de12b 644 Main/b/c
f83f0637e55e3c48e9922f14a016761626d79d3d 755 * Main/d
$ hg update tip
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ test -x Main/full-exec
End Test
stopping the p4 server