Convert Svk VCS

This commit is contained in:
Romain Failliot 2021-11-18 14:14:57 -05:00
parent 5d6ece84e1
commit ab25807876
2 changed files with 60 additions and 38 deletions

View File

@ -61,6 +61,7 @@ from diffuse.vcs.git import Git
from diffuse.vcs.hg import Hg from diffuse.vcs.hg import Hg
from diffuse.vcs.mtn import Mtn from diffuse.vcs.mtn import Mtn
from diffuse.vcs.rcs import Rcs from diffuse.vcs.rcs import Rcs
from diffuse.vcs.svk import Svk
from diffuse.vcs.svn import Svn from diffuse.vcs.svn import Svn
if not hasattr(__builtins__, 'WindowsError'): if not hasattr(__builtins__, 'WindowsError'):
@ -1291,43 +1292,6 @@ def _get_svn_repo(path, prefs):
if p: if p:
return Svn(p) return Svn(p)
class _Svk(_Svn):
def __init__(self, root):
_Svn.__init__(self, root)
def _getVcs(self):
return 'svk'
def _getURLPrefix(self):
return 'Depot Path: '
def _parseStatusLine(self, s):
if len(s) < 4 or s[0] not in 'ACDMR':
return
return s[0], s[4:]
def _getPreviousRevision(self, rev):
if rev is None:
return 'HEAD'
if rev.endswith('@'):
return str(int(rev[:-1]) - 1) + '@'
return str(int(rev) - 1)
def getRevision(self, prefs, name, rev):
return utils.popenRead(
self.root,
[
prefs.getString('svk_bin'),
'cat',
'-r',
rev,
'{}/{}'.format(
self._getURL(prefs),
utils.relpath(self.root, os.path.abspath(name)).replace(os.sep, '/'))
],
prefs,
'svk_bash')
def _get_svk_repo(path, prefs): def _get_svk_repo(path, prefs):
name = path name = path
# parse the ~/.svk/config file to discover which directories are part of # parse the ~/.svk/config file to discover which directories are part of
@ -1386,7 +1350,7 @@ def _get_svk_repo(path, prefs):
break break
# check if the file belongs to one of the project directories # check if the file belongs to one of the project directories
if FolderSet(projs).contains(name): if FolderSet(projs).contains(name):
return _Svk(path) return Svk(path)
except IOError: except IOError:
utils.logError(_('Error parsing %s.') % (svkconfig, )) utils.logError(_('Error parsing %s.') % (svkconfig, ))

58
src/vcs/svk.py Normal file
View File

@ -0,0 +1,58 @@
# Diffuse: a graphical tool for merging and comparing text files.
#
# Copyright (C) 2019 Derrick Moser <derrick_moser@yahoo.com>
# Copyright (C) 2021 Romain Failliot <romain.failliot@foolstep.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
import os
import glob
from diffuse import utils
from diffuse.vcs.svn import Svn
class Svk(Svn):
def _getVcs(self):
return 'svk'
def _getURLPrefix(self):
return 'Depot Path: '
def _parseStatusLine(self, s):
if len(s) < 4 or s[0] not in 'ACDMR':
return
return s[0], s[4:]
def _getPreviousRevision(self, rev):
if rev is None:
return 'HEAD'
if rev.endswith('@'):
return str(int(rev[:-1]) - 1) + '@'
return str(int(rev) - 1)
def getRevision(self, prefs, name, rev):
return utils.popenRead(
self.root,
[
prefs.getString('svk_bin'),
'cat',
'-r',
rev,
'{}/{}'.format(
self._getURL(prefs),
utils.relpath(self.root, os.path.abspath(name)).replace(os.sep, '/'))
],
prefs,
'svk_bash')