def ensure(self, *args, **kwargs): |
""" ensure that an args-joined path exists (by default as |
a file). If you specify a keyword argument 'dir=True' |
then the path is forced to be a directory path. |
""" |
if getattr(self, 'rev', None) is not None: |
raise py.error.EINVAL(self, "revisions are immutable") |
target = self.join(*args) |
dir = kwargs.get('dir', 0) |
for x in target.parts(reverse=True): |
if x.check(): |
break |
else: |
raise py.error.ENOENT(target, "has not any valid base!") |
if x == target: |
if not x.check(dir=dir): |
raise dir and py.error.ENOTDIR(x) or py.error.EISDIR(x) |
return x |
tocreate = target.relto(x) |
basename = tocreate.split(self.sep, 1)[0] |
tempdir = py.path.local.mkdtemp() |
try: |
tempdir.ensure(tocreate, dir=dir) |
cmd = 'svn import -m "%s" "%s" "%s"' % ( |
"ensure %s" % self._escape(tocreate), |
self._escape(tempdir.join(basename)), |
x.join(basename)._encodedurl()) |
process.cmdexec(cmd) |
self._lsnorevcache.delentry(x.strpath) |
finally: |
-> tempdir.remove() |
return target |