* [gentoo-commits] proj/portage:repoman commit in: pym/repoman/, pym/repoman/modules/vcs/cvs/, pym/repoman/modules/vcs/None/, ...
@ 2016-03-12 18:10 Brian Dolbec
0 siblings, 0 replies; 2+ messages in thread
From: Brian Dolbec @ 2016-03-12 18:10 UTC (permalink / raw
To: gentoo-commits
commit: 3d633146a48f65d1a6beeb9603f987bfa92e65ea
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 7 18:50:21 2016 +0000
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sat Mar 12 17:57:40 2016 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=3d633146
repoman: Add repo_settings to VCSSettings class and the Changes classes
Needed for more code migration from atcions.py to the vcs modules.
pym/repoman/main.py | 4 ++++
pym/repoman/modules/vcs/None/changes.py | 4 ++--
pym/repoman/modules/vcs/bzr/changes.py | 4 ++--
pym/repoman/modules/vcs/changes.py | 4 +++-
pym/repoman/modules/vcs/cvs/changes.py | 4 ++--
pym/repoman/modules/vcs/git/changes.py | 4 ++--
pym/repoman/modules/vcs/hg/changes.py | 4 ++--
pym/repoman/modules/vcs/svn/changes.py | 4 ++--
8 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/pym/repoman/main.py b/pym/repoman/main.py
index 6921005..337e638 100755
--- a/pym/repoman/main.py
+++ b/pym/repoman/main.py
@@ -84,6 +84,7 @@ def repoman_main(argv):
myreporoot = os.path.basename(portdir_overlay)
myreporoot += mydir[len(portdir_overlay):]
+ # avoid a circular parameter repo_settings
vcs_settings = VCSSettings(options, repoman_settings)
repo_settings = RepoSettings(
@@ -91,6 +92,9 @@ def repoman_main(argv):
repoman_settings, vcs_settings, options, qawarnings)
repoman_settings = repo_settings.repoman_settings
+ # Now set repo_settings
+ vcs_settings.repo_settings = repo_settings
+
if 'digest' in repoman_settings.features and options.digest != 'n':
options.digest = 'y'
diff --git a/pym/repoman/modules/vcs/None/changes.py b/pym/repoman/modules/vcs/None/changes.py
index 759b554..37693ad 100644
--- a/pym/repoman/modules/vcs/None/changes.py
+++ b/pym/repoman/modules/vcs/None/changes.py
@@ -12,12 +12,12 @@ class Changes(ChangesBase):
vcs = 'None'
- def __init__(self, options):
+ def __init__(self, options, repo_settings):
'''Class init
@param options: commandline options
'''
- super(Changes, self).__init__(options)
+ super(Changes, self).__init__(options, repo_settings)
def scan(self):
'''VCS type scan function, looks for all detectable changes'''
diff --git a/pym/repoman/modules/vcs/bzr/changes.py b/pym/repoman/modules/vcs/bzr/changes.py
index 519d311..9bd0646 100644
--- a/pym/repoman/modules/vcs/bzr/changes.py
+++ b/pym/repoman/modules/vcs/bzr/changes.py
@@ -13,12 +13,12 @@ class Changes(ChangesBase):
vcs = 'bzr'
- def __init__(self, options):
+ def __init__(self, options, repo_settings):
'''Class init
@param options: commandline options
'''
- super(Changes, self).__init__(options)
+ super(Changes, self).__init__(options, repo_settings)
def _scan(self):
'''VCS type scan function, looks for all detectable changes'''
diff --git a/pym/repoman/modules/vcs/changes.py b/pym/repoman/modules/vcs/changes.py
index 1745a65..921e9b5 100644
--- a/pym/repoman/modules/vcs/changes.py
+++ b/pym/repoman/modules/vcs/changes.py
@@ -13,8 +13,10 @@ class ChangesBase(object):
vcs = 'None'
- def __init__(self, options):
+ def __init__(self, options, repo_settings):
self.options = options
+ self.repo_settings = repo_settings
+ self.repoman_settings = repo_settings.repoman_settings
self._reset()
def _reset(self):
diff --git a/pym/repoman/modules/vcs/cvs/changes.py b/pym/repoman/modules/vcs/cvs/changes.py
index 061486f..5fc9642 100644
--- a/pym/repoman/modules/vcs/cvs/changes.py
+++ b/pym/repoman/modules/vcs/cvs/changes.py
@@ -16,12 +16,12 @@ class Changes(ChangesBase):
vcs = 'cvs'
- def __init__(self, options):
+ def __init__(self, options, repo_settings):
'''Class init
@param options: commandline options
'''
- super(Changes, self).__init__(options)
+ super(Changes, self).__init__(options, repo_settings)
self._tree = None
def _scan(self):
diff --git a/pym/repoman/modules/vcs/git/changes.py b/pym/repoman/modules/vcs/git/changes.py
index d0b6acd..f159298 100644
--- a/pym/repoman/modules/vcs/git/changes.py
+++ b/pym/repoman/modules/vcs/git/changes.py
@@ -13,12 +13,12 @@ class Changes(ChangesBase):
vcs = 'git'
- def __init__(self, options):
+ def __init__(self, options, repo_settings):
'''Class init
@param options: commandline options
'''
- super(Changes, self).__init__(options)
+ super(Changes, self).__init__(options, repo_settings)
def _scan(self):
'''VCS type scan function, looks for all detectable changes'''
diff --git a/pym/repoman/modules/vcs/hg/changes.py b/pym/repoman/modules/vcs/hg/changes.py
index 9729085..311ca12 100644
--- a/pym/repoman/modules/vcs/hg/changes.py
+++ b/pym/repoman/modules/vcs/hg/changes.py
@@ -13,12 +13,12 @@ class Changes(ChangesBase):
vcs = 'hg'
- def __init__(self, options):
+ def __init__(self, options, repo_settings):
'''Class init
@param options: commandline options
'''
- super(Changes, self).__init__(options)
+ super(Changes, self).__init__(options, repo_settings)
def _scan(self):
'''VCS type scan function, looks for all detectable changes'''
diff --git a/pym/repoman/modules/vcs/svn/changes.py b/pym/repoman/modules/vcs/svn/changes.py
index 6b25a21..ffe19c1 100644
--- a/pym/repoman/modules/vcs/svn/changes.py
+++ b/pym/repoman/modules/vcs/svn/changes.py
@@ -13,12 +13,12 @@ class Changes(ChangesBase):
vcs = 'svn'
- def __init__(self, options):
+ def __init__(self, options, repo_settings):
'''Class init
@param options: commandline options
'''
- super(Changes, self).__init__(options)
+ super(Changes, self).__init__(options, repo_settings)
def _scan(self):
'''VCS type scan function, looks for all detectable changes'''
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [gentoo-commits] proj/portage:repoman commit in: pym/repoman/, pym/repoman/modules/vcs/cvs/, pym/repoman/modules/vcs/None/, ...
@ 2016-03-12 18:10 Brian Dolbec
0 siblings, 0 replies; 2+ messages in thread
From: Brian Dolbec @ 2016-03-12 18:10 UTC (permalink / raw
To: gentoo-commits
commit: 4936f759401b7d5d540f70911029c0f8c080bcc3
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 30 01:58:36 2016 +0000
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sat Mar 12 17:57:40 2016 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=4936f759
repoman: Migrate actions.py vcs code to the vcs modules
Add missing changes code to the existing Changes classes.
This removes the duplicated code in the Actions class.
Optimize the code for the vcs modules.
pym/repoman/actions.py | 213 +++++--------------------------
pym/repoman/modules/vcs/None/__init__.py | 1 +
pym/repoman/modules/vcs/bzr/__init__.py | 1 +
pym/repoman/modules/vcs/bzr/changes.py | 21 ++-
pym/repoman/modules/vcs/changes.py | 29 +++++
pym/repoman/modules/vcs/cvs/__init__.py | 1 +
pym/repoman/modules/vcs/cvs/changes.py | 29 ++++-
pym/repoman/modules/vcs/git/__init__.py | 1 +
pym/repoman/modules/vcs/git/changes.py | 26 +++-
pym/repoman/modules/vcs/hg/__init__.py | 1 +
pym/repoman/modules/vcs/hg/changes.py | 40 +++++-
pym/repoman/modules/vcs/settings.py | 5 +-
pym/repoman/modules/vcs/svn/__init__.py | 1 +
pym/repoman/modules/vcs/svn/changes.py | 38 +++++-
14 files changed, 190 insertions(+), 217 deletions(-)
diff --git a/pym/repoman/actions.py b/pym/repoman/actions.py
index 55aff3f..7a29635 100644
--- a/pym/repoman/actions.py
+++ b/pym/repoman/actions.py
@@ -16,7 +16,6 @@ from itertools import chain
from _emerge.UserQuery import UserQuery
import portage
-from portage import cvstree
from portage import os
from portage import _encodings
from portage import _unicode_encode
@@ -26,8 +25,7 @@ from portage.package.ebuild.digestgen import digestgen
from portage.process import find_binary, spawn
from portage.util import writemsg_level
-from repoman._subprocess import repoman_popen, repoman_getstatusoutput
-from repoman.errors import err
+from repoman._subprocess import repoman_getstatusoutput
from repoman.gpg import gpgsign, need_signature
from repoman import utilities
from repoman.modules.vcs.vcs import vcs_files_to_cps
@@ -72,13 +70,11 @@ class Actions(object):
def perform(self, qa_output):
- myunadded, mydeleted = self._vcs_unadded()
+ myautoadd = self._vcs_autoadd()
- myautoadd = self._vcs_autoadd(myunadded)
+ self._vcs_deleted()
- self._vcs_deleted(mydeleted)
-
- changes = self.get_vcs_changed(mydeleted)
+ changes = self.get_vcs_changed()
mynew, mychanged, myremoved, no_expansion, expansion = changes
@@ -128,12 +124,14 @@ class Actions(object):
print("* %s files being committed..." % green(str(len(myupdates))), end=' ')
- if self.vcs_settings.vcs not in ('cvs', 'svn'):
- # With git, bzr and hg, there's never any keyword expansion, so
+ if not self.vcs_settings.needs_keyword_expansion:
+ # With some VCS types there's never any keyword expansion, so
# there's no need to regenerate manifests and all files will be
# committed in one big commit at the end.
+ logging.debug("VCS type doesn't need keyword expansion")
print()
elif not self.repo_settings.repo_config.thin_manifest:
+ logging.debug("perform: Calling thick_manifest()")
self.thick_manifest(myupdates, myheaders, no_expansion, expansion)
logging.info("myupdates: %s", myupdates)
@@ -272,62 +270,8 @@ class Actions(object):
sys.exit(1)
- def _vcs_unadded(self):
- myunadded = []
- mydeleted = []
- if self.vcs_settings.vcs == "cvs":
- try:
- myvcstree = portage.cvstree.getentries("./", recursive=1)
- myunadded = portage.cvstree.findunadded(
- myvcstree, recursive=1, basedir="./")
- except SystemExit:
- raise # TODO propagate this
- except:
- err("Error retrieving CVS tree; exiting.")
- if self.vcs_settings.vcs == "svn":
- try:
- with repoman_popen("svn status --no-ignore") as f:
- svnstatus = f.readlines()
- myunadded = [
- "./" + elem.rstrip().split()[1]
- for elem in svnstatus
- if elem.startswith("?") or elem.startswith("I")]
- except SystemExit:
- raise # TODO propagate this
- except:
- err("Error retrieving SVN info; exiting.")
- if self.vcs_settings.vcs == "git":
- # get list of files not under version control or missing
- myf = repoman_popen("git ls-files --others")
- myunadded = ["./" + elem[:-1] for elem in myf]
- myf.close()
- if self.vcs_settings.vcs == "bzr":
- try:
- with repoman_popen("bzr status -S .") as f:
- bzrstatus = f.readlines()
- myunadded = [
- "./" + elem.rstrip().split()[1].split('/')[-1:][0]
- for elem in bzrstatus
- if elem.startswith("?") or elem[0:2] == " D"]
- except SystemExit:
- raise # TODO propagate this
- except:
- err("Error retrieving bzr info; exiting.")
- if self.vcs_settings.vcs == "hg":
- with repoman_popen("hg status --no-status --unknown .") as f:
- myunadded = f.readlines()
- myunadded = ["./" + elem.rstrip() for elem in myunadded]
-
- # Mercurial doesn't handle manually deleted files as removed from
- # the repository, so the user need to remove them before commit,
- # using "hg remove [FILES]"
- with repoman_popen("hg status --no-status --deleted .") as f:
- mydeleted = f.readlines()
- mydeleted = ["./" + elem.rstrip() for elem in mydeleted]
- return myunadded, mydeleted
-
-
- def _vcs_autoadd(self, myunadded):
+ def _vcs_autoadd(self):
+ myunadded = self.vcs_settings.changes.unadded
myautoadd = []
if myunadded:
for x in range(len(myunadded) - 1, -1, -1):
@@ -359,137 +303,38 @@ class Actions(object):
return myautoadd
- def _vcs_deleted(self, mydeleted):
- if self.vcs_settings.vcs == "hg" and mydeleted:
+ def _vcs_deleted(self):
+ if self.vcs_settings.changes.has_deleted:
print(red(
"!!! The following files are removed manually"
" from your local tree but are not"))
print(red(
"!!! removed from the repository."
- " Please remove them, using \"hg remove [FILES]\"."))
- for x in mydeleted:
+ " Please remove them, using \"%s remove [FILES]\"."
+ % self.vcs_settings.vcs))
+ for x in self.vcs_settings.changes.deleted:
print(" ", x)
print()
print()
sys.exit(1)
- def get_vcs_changed(self, mydeleted):
+ def get_vcs_changed(self):
'''Holding function which calls the approriate VCS module for the data'''
- changed = ([], [], [], [], [])
- if self.vcs_settings.vcs:
- vcs_module = getattr(self, '_get_changed_%s_' % self.vcs_settings.vcs)
- changed = vcs_module(mydeleted)
- mynew, mychanged, myremoved, no_expansion, expansion = changed
-
- a_file_is_changed = mychanged or mynew or myremoved
- a_file_is_deleted_hg = self.vcs_settings.vcs == "hg" and mydeleted
-
- if not (a_file_is_changed or a_file_is_deleted_hg):
- utilities.repoman_sez(
- "\"Doing nothing is not always good for QA.\"")
- print()
- print("(Didn't find any changed files...)")
- print()
- sys.exit(1)
- return changed
-
-
- def _get_changed_cvs_(self, mydeleted):
- mycvstree = cvstree.getentries("./", recursive=1)
- mychanged = cvstree.findchanged(mycvstree, recursive=1, basedir="./")
- mynew = cvstree.findnew(mycvstree, recursive=1, basedir="./")
- myremoved = portage.cvstree.findremoved(mycvstree, recursive=1, basedir="./")
- bin_blob_pattern = re.compile("^-kb$")
- no_expansion = set(portage.cvstree.findoption(
- mycvstree, bin_blob_pattern, recursive=1, basedir="./"))
- expansion = {}
- return (mynew, mychanged, myremoved, no_expansion, expansion)
-
- def _get_changed_svn_(self, mydeleted):
- with repoman_popen("svn status") as f:
- svnstatus = f.readlines()
- mychanged = [
- "./" + elem.split()[-1:][0]
- for elem in svnstatus
- if (elem[:1] in "MR" or elem[1:2] in "M")]
- mynew = [
- "./" + elem.split()[-1:][0]
- for elem in svnstatus
- if elem.startswith("A")]
- myremoved = [
- "./" + elem.split()[-1:][0]
- for elem in svnstatus
- if elem.startswith("D")]
- # Subversion expands keywords specified in svn:keywords properties.
- with repoman_popen("svn propget -R svn:keywords") as f:
- props = f.readlines()
- expansion = dict(
- ("./" + prop.split(" - ")[0], prop.split(" - ")[1].split())
- for prop in props if " - " in prop)
- no_expansion = set()
- return (mynew, mychanged, myremoved, no_expansion, expansion)
-
- def _get_changed_git_(self, mydeleted):
- with repoman_popen(
- "git diff-index --name-only "
- "--relative --diff-filter=M HEAD") as f:
- mychanged = f.readlines()
- mychanged = ["./" + elem[:-1] for elem in mychanged]
- with repoman_popen(
- "git diff-index --name-only "
- "--relative --diff-filter=A HEAD") as f:
- mynew = f.readlines()
- mynew = ["./" + elem[:-1] for elem in mynew]
- with repoman_popen(
- "git diff-index --name-only "
- "--relative --diff-filter=D HEAD") as f:
- myremoved = f.readlines()
- myremoved = ["./" + elem[:-1] for elem in myremoved]
- no_expansion = set()
- expansion = {}
- return (mynew, mychanged, myremoved, no_expansion, expansion)
-
- def _get_changed_bzr_(self, mydeleted):
- with repoman_popen("bzr status -S .") as f:
- bzrstatus = f.readlines()
- mychanged = [
- "./" + elem.split()[-1:][0].split('/')[-1:][0]
- for elem in bzrstatus
- if elem and elem[1:2] == "M"]
- mynew = [
- "./" + elem.split()[-1:][0].split('/')[-1:][0]
- for elem in bzrstatus
- if elem and (elem[1:2] in "NK" or elem[0:1] == "R")]
- myremoved = [
- "./" + elem.split()[-1:][0].split('/')[-1:][0]
- for elem in bzrstatus
- if elem.startswith("-")]
- myremoved = [
- "./" + elem.split()[-3:-2][0].split('/')[-1:][0]
- for elem in bzrstatus
- if elem and (elem[1:2] == "K" or elem[0:1] == "R")]
- # Bazaar expands nothing.
- no_expansion = set()
- expansion = {}
- return (mynew, mychanged, myremoved, no_expansion, expansion)
-
- def _get_changed_hg_(self, mydeleted):
- with repoman_popen("hg status --no-status --modified .") as f:
- mychanged = f.readlines()
- mychanged = ["./" + elem.rstrip() for elem in mychanged]
-
- with repoman_popen("hg status --no-status --added .") as f:
- mynew = f.readlines()
- mynew = ["./" + elem.rstrip() for elem in mynew]
-
- with repoman_popen("hg status --no-status --removed .") as f:
- myremoved = f.readlines()
- myremoved = ["./" + elem.rstrip() for elem in myremoved]
- no_expansion = set()
- expansion = {}
- return (mynew, mychanged, myremoved, no_expansion, expansion)
+ changes = self.vcs_settings.changes
+ # re-run the scan to pick up a newly modified Manifest file
+ logging.debug("RE-scanning for changes...")
+ changes.scan()
+ if not changes.has_changes:
+ utilities.repoman_sez(
+ "\"Doing nothing is not always good for QA.\"")
+ print()
+ print("(Didn't find any changed files...)")
+ print()
+ sys.exit(1)
+ return (changes.new, changes.changed, changes.removed,
+ changes.no_expansion, changes.expansion)
def get_commit_footer(self):
portage_version = getattr(portage, "VERSION", None)
diff --git a/pym/repoman/modules/vcs/None/__init__.py b/pym/repoman/modules/vcs/None/__init__.py
index 4146e1e..2859325 100644
--- a/pym/repoman/modules/vcs/None/__init__.py
+++ b/pym/repoman/modules/vcs/None/__init__.py
@@ -19,6 +19,7 @@ module_spec = {
'func_desc': {
},
'vcs_preserves_mtime': False,
+ 'needs_keyword_expansion': False,
},
'None-changes': {
'name': "None_changes",
diff --git a/pym/repoman/modules/vcs/bzr/__init__.py b/pym/repoman/modules/vcs/bzr/__init__.py
index ccdbddf..1192782 100644
--- a/pym/repoman/modules/vcs/bzr/__init__.py
+++ b/pym/repoman/modules/vcs/bzr/__init__.py
@@ -19,6 +19,7 @@ module_spec = {
'func_desc': {
},
'vcs_preserves_mtime': True,
+ 'needs_keyword_expansion': False,
},
'bzr-changes': {
'name': "bzr_changes",
diff --git a/pym/repoman/modules/vcs/bzr/changes.py b/pym/repoman/modules/vcs/bzr/changes.py
index 0f70613..41ce347 100644
--- a/pym/repoman/modules/vcs/bzr/changes.py
+++ b/pym/repoman/modules/vcs/bzr/changes.py
@@ -25,8 +25,19 @@ class Changes(ChangesBase):
"./" + elem.split()[-1:][0].split('/')[-1:][0]
for elem in bzrstatus
if elem and (elem[1:2] == "NK" or elem[0:1] == "R")]
- if self.options.if_modified == "y":
- self.removed = [
- "./" + elem.split()[-3:-2][0].split('/')[-1:][0]
- for elem in bzrstatus
- if elem and (elem[1:2] == "K" or elem[0:1] == "R")]
+ self.removed = [
+ "./" + elem.split()[-3:-2][0].split('/')[-1:][0]
+ for elem in bzrstatus
+ if elem and (elem[1:2] == "K" or elem[0:1] == "R")]
+ # Bazaar expands nothing.
+
+ @property
+ def unadded(self):
+ '''Bazzar method of getting the unadded files in the repository'''
+ if self._unadded is not None:
+ return self._unadded
+ self._unadded = [
+ "./" + elem.rstrip().split()[1].split('/')[-1:][0]
+ for elem in bzrstatus
+ if elem.startswith("?") or elem[0:2] == " D"]
+ return self._unadded
diff --git a/pym/repoman/modules/vcs/changes.py b/pym/repoman/modules/vcs/changes.py
index 6553ac9..6eefaed 100644
--- a/pym/repoman/modules/vcs/changes.py
+++ b/pym/repoman/modules/vcs/changes.py
@@ -21,6 +21,10 @@ class ChangesBase(object):
self.changed = []
self.new = []
self.removed = []
+ self.no_expansion = set()
+ self._expansion = None
+ self._deleted = None
+ self._unadded = None
def scan(self):
self._reset()
@@ -37,3 +41,28 @@ class ChangesBase(object):
'''Placeholder for subclassing'''
pass
+ @property
+ def has_deleted(self):
+ '''Placeholder for VCS that requires manual deletion of files'''
+ return self.deleted != []
+
+ @property
+ def has_changes(self):
+ '''Placeholder for VCS repo common has changes result'''
+ changed = self.changed or self.new or self.removed or self.deleted
+ return changed != []
+
+ @property
+ def unadded(self):
+ '''Override this function as needed'''
+ return []
+
+ @property
+ def deleted(self):
+ '''Override this function as needed'''
+ return []
+
+ @property
+ def expansion(self):
+ '''Override this function as needed'''
+ return {}
diff --git a/pym/repoman/modules/vcs/cvs/__init__.py b/pym/repoman/modules/vcs/cvs/__init__.py
index 6db6078..ba60e2c 100644
--- a/pym/repoman/modules/vcs/cvs/__init__.py
+++ b/pym/repoman/modules/vcs/cvs/__init__.py
@@ -19,6 +19,7 @@ module_spec = {
'func_desc': {
},
'vcs_preserves_mtime': True,
+ 'needs_keyword_expansion': True,
},
'cvs-changes': {
'name': "cvs_changes",
diff --git a/pym/repoman/modules/vcs/cvs/changes.py b/pym/repoman/modules/vcs/cvs/changes.py
index f0893a1..cdfb4b2 100644
--- a/pym/repoman/modules/vcs/cvs/changes.py
+++ b/pym/repoman/modules/vcs/cvs/changes.py
@@ -1,7 +1,11 @@
-from portage import cvstree
+import re
+
+from repoman._portage import portage
from repoman.modules.vcs.changes import ChangesBase
+from portage import cvstree
+
class Changes(ChangesBase):
'''Class object to scan and hold the resultant data
@@ -12,11 +16,22 @@ class Changes(ChangesBase):
def __init__(self, options):
super(Changes, self).__init__(options)
+ self._tree = None
def _scan(self):
- tree = cvstree.getentries("./", recursive=1)
- self.changed = cvstree.findchanged(tree, recursive=1, basedir="./")
- self.new = cvstree.findnew(tree, recursive=1, basedir="./")
- if self.options.if_modified == "y":
- self.removed = cvstree.findremoved(tree, recursive=1, basedir="./")
- del tree
+ '''VCS type scan function, looks for all detectable changes'''
+ self._tree = portage.cvstree.getentries("./", recursive=1)
+ self.changed = cvstree.findchanged(self._tree, recursive=1, basedir="./")
+ self.new = cvstree.findnew(self._tree, recursive=1, basedir="./")
+ self.removed = cvstree.findremoved(self._tree, recursive=1, basedir="./")
+ bin_blob_pattern = re.compile("^-kb$")
+ self.no_expansion = set(portage.cvstree.findoption(
+ self._tree, bin_blob_pattern, recursive=1, basedir="./"))
+
+ @property
+ def unadded(self):
+ '''VCS method of getting the unadded files in the repository'''
+ if self._unadded is not None:
+ return self._unadded
+ self._unadded = portage.cvstree.findunadded(self._tree, recursive=1, basedir="./")
+ return self._unadded
diff --git a/pym/repoman/modules/vcs/git/__init__.py b/pym/repoman/modules/vcs/git/__init__.py
index 4e1d599..e077767 100644
--- a/pym/repoman/modules/vcs/git/__init__.py
+++ b/pym/repoman/modules/vcs/git/__init__.py
@@ -19,6 +19,7 @@ module_spec = {
'func_desc': {
},
'vcs_preserves_mtime': False,
+ 'needs_keyword_expansion': False,
},
'git-changes': {
'name': "git_changes",
diff --git a/pym/repoman/modules/vcs/git/changes.py b/pym/repoman/modules/vcs/git/changes.py
index 6ee39a0..0342251 100644
--- a/pym/repoman/modules/vcs/git/changes.py
+++ b/pym/repoman/modules/vcs/git/changes.py
@@ -27,11 +27,23 @@ class Changes(ChangesBase):
"--relative --diff-filter=A HEAD") as f:
new = f.readlines()
self.new = ["./" + elem[:-1] for elem in new]
- if self.options.if_modified == "y":
- with repoman_popen(
- "git diff-index --name-only "
- "--relative --diff-filter=D HEAD") as f:
- removed = f.readlines()
- self.removed = ["./" + elem[:-1] for elem in removed]
- del removed
+ del new
+ with repoman_popen(
+ "git diff-index --name-only "
+ "--relative --diff-filter=D HEAD") as f:
+ removed = f.readlines()
+ self.removed = ["./" + elem[:-1] for elem in removed]
+ del removed
+
+ @property
+ def unadded(self):
+ '''VCS method of getting the unadded files in the repository'''
+ if self._unadded is not None:
+ return self._unadded
+ # get list of files not under version control or missing
+ with repoman_popen("git ls-files --others") as f:
+ unadded = f.readlines()
+ self._unadded = ["./" + elem[:-1] for elem in unadded]
+ del unadded
+ return self._unadded
diff --git a/pym/repoman/modules/vcs/hg/__init__.py b/pym/repoman/modules/vcs/hg/__init__.py
index 6f8a376..6737dfb 100644
--- a/pym/repoman/modules/vcs/hg/__init__.py
+++ b/pym/repoman/modules/vcs/hg/__init__.py
@@ -19,6 +19,7 @@ module_spec = {
'func_desc': {
},
'vcs_preserves_mtime': False,
+ 'needs_keyword_expansion': False,
},
'hg-changes': {
'name': "hg_changes",
diff --git a/pym/repoman/modules/vcs/hg/changes.py b/pym/repoman/modules/vcs/hg/changes.py
index 86dffff..f4e1ec8 100644
--- a/pym/repoman/modules/vcs/hg/changes.py
+++ b/pym/repoman/modules/vcs/hg/changes.py
@@ -18,12 +18,40 @@ class Changes(ChangesBase):
with repoman_popen("hg status --no-status --modified .") as f:
changed = f.readlines()
self.changed = ["./" + elem.rstrip() for elem in changed]
+ del changed
+
with repoman_popen("hg status --no-status --added .") as f:
new = f.readlines()
self.new = ["./" + elem.rstrip() for elem in new]
- if self.options.if_modified == "y":
- with repoman_popen("hg status --no-status --removed .") as f:
- removed = f.readlines()
- self.removed = ["./" + elem.rstrip() for elem in removed]
- del removed
- del changed, new
+ del new
+
+ with repoman_popen("hg status --no-status --removed .") as f:
+ removed = f.readlines()
+ self.removed = ["./" + elem.rstrip() for elem in removed]
+ del removed
+
+ @property
+ def unadded(self):
+ '''VCS method of getting the unadded files in the repository'''
+ if self._unadded is not None:
+ return self._unadded
+ with repoman_popen("hg status --no-status --unknown .") as f:
+ unadded = f.readlines()
+ self._unadded = ["./" + elem.rstrip() for elem in unadded]
+ del unadded
+ return self._unadded
+
+ @property
+ def deleted(self):
+ '''VCS method of getting the deleted files in the repository'''
+ if self._deleted is not None:
+ return self._deleted
+ # Mercurial doesn't handle manually deleted files as removed from
+ # the repository, so the user need to remove them before commit,
+ # using "hg remove [FILES]"
+ with repoman_popen("hg status --no-status --deleted .") as f:
+ deleted = f.readlines()
+ self._deleted = ["./" + elem.rstrip() for elem in deleted]
+ del deleted
+ return self._deleted
+
diff --git a/pym/repoman/modules/vcs/settings.py b/pym/repoman/modules/vcs/settings.py
index 34f1c78..bcd5f18 100644
--- a/pym/repoman/modules/vcs/settings.py
+++ b/pym/repoman/modules/vcs/settings.py
@@ -4,7 +4,6 @@ from __future__ import print_function, unicode_literals
import logging
import sys
-from repoman._portage import portage
from portage.output import red
from repoman.modules.vcs import module_controller, module_names
from repoman.modules.vcs.vcs import FindVCS
@@ -58,6 +57,8 @@ class VCSSettings(object):
logging.error("VCSSettings: Unknown VCS type: %s", self.vcs)
logging.error("Available modules: %s", module_controller.parents)
+ self.needs_keyword_expansion = module_controller.modules[
+ "%s_status" % self.vcs]['needs_keyword_expansion']
self.vcs_local_opts = repoman_settings.get(
"REPOMAN_VCS_LOCAL_OPTS", "").split()
self.vcs_global_opts = repoman_settings.get(
@@ -88,5 +89,5 @@ class VCSSettings(object):
def changes(self):
if not self._changes:
changes = self.module_controller.get_class('%s_changes' % self.vcs)
- self._changes = changes(self.options)
+ self._changes = changes(self.options, self.vcs)
return self._changes
diff --git a/pym/repoman/modules/vcs/svn/__init__.py b/pym/repoman/modules/vcs/svn/__init__.py
index 41e481a..becb93e 100644
--- a/pym/repoman/modules/vcs/svn/__init__.py
+++ b/pym/repoman/modules/vcs/svn/__init__.py
@@ -19,6 +19,7 @@ module_spec = {
'func_desc': {
},
'vcs_preserves_mtime': False,
+ 'needs_keyword_expansion': True,
},
'svn-changes': {
'name': "svn_changes",
diff --git a/pym/repoman/modules/vcs/svn/changes.py b/pym/repoman/modules/vcs/svn/changes.py
index 3567b61..639ee9f 100644
--- a/pym/repoman/modules/vcs/svn/changes.py
+++ b/pym/repoman/modules/vcs/svn/changes.py
@@ -25,9 +25,35 @@ class Changes(ChangesBase):
"./" + elem.split()[-1:][0]
for elem in svnstatus
if elem.startswith("A")]
- if self.options.if_modified == "y":
- self.removed = [
- "./" + elem.split()[-1:][0]
- for elem in svnstatus
- if elem.startswith("D")]
-
+ self.removed = [
+ "./" + elem.split()[-1:][0]
+ for elem in svnstatus
+ if elem.startswith("D")]
+
+ @property
+ def expansion(self):
+ '''VCS method of getting the expanded keywords in the repository'''
+ if self._expansion is not None:
+ return self._expansion
+ # Subversion expands keywords specified in svn:keywords properties.
+ with repoman_popen("svn propget -R svn:keywords") as f:
+ props = f.readlines()
+ self._expansion = dict(
+ ("./" + prop.split(" - ")[0], prop.split(" - ")[1].split())
+ for prop in props if " - " in prop)
+ del props
+ return self._expansion
+
+ @property
+ def unadded(self):
+ '''VCS method of getting the unadded files in the repository'''
+ if self._unadded is not None:
+ return self._unadded
+ with repoman_popen("svn status --no-ignore") as f:
+ svnstatus = f.readlines()
+ self._unadded = [
+ "./" + elem.rstrip().split()[1]
+ for elem in svnstatus
+ if elem.startswith("?") or elem.startswith("I")]
+ del svnstatus
+ return self._unadded
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-03-12 18:10 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-12 18:10 [gentoo-commits] proj/portage:repoman commit in: pym/repoman/, pym/repoman/modules/vcs/cvs/, pym/repoman/modules/vcs/None/, Brian Dolbec
-- strict thread matches above, loose matches on Subject: below --
2016-03-12 18:10 Brian Dolbec
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox