blob: 867057545ff99c1c2bf8e6328f72e9ae68c58ef0 [file] [log] [blame]
'''
Mercurial module Changes class submodule
'''
from repoman.modules.vcs.changes import ChangesBase
from repoman._subprocess import repoman_popen
from repoman._portage import portage
from portage import os
from portage.package.ebuild.digestgen import digestgen
from portage.process import spawn
class Changes(ChangesBase):
'''Class object to scan and hold the resultant data
for all changes to process.
'''
vcs = 'hg'
def __init__(self, options, repo_settings):
'''Class init
@param options: the run time cli options
@param repo_settings: RepoSettings instance
'''
super(Changes, self).__init__(options, repo_settings)
def _scan(self):
'''VCS type scan function, looks for all detectable changes'''
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]
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
def digest_regen(self, updates, removed, manifests, scanner, broken_changelog_manifests):
'''Regenerate manifests
@param updates: updated files
@param removed: removed files
@param manifests: Manifest files
@param scanner: The repoman.scanner.Scanner instance
@param broken_changelog_manifests: broken changelog manifests
'''
if broken_changelog_manifests:
for x in broken_changelog_manifests:
self.repoman_settings["O"] = os.path.join(self.repo_settings.repodir, x)
digestgen(mysettings=self.repoman_settings, myportdb=self.repo_settings.portdb)
def commit(self, myfiles, commitmessagefile):
'''Hg commit function
@param commitfiles: list of files to commit
@param commitmessagefile: file containing the commit message
@returns: The sub-command exit value or 0
'''
commit_cmd = []
commit_cmd.append(self.vcs)
commit_cmd.extend(self.vcs_settings.vcs_global_opts)
commit_cmd.append("commit")
commit_cmd.extend(self.vcs_settings.vcs_local_opts)
commit_cmd.extend(["--logfile", commitmessagefile])
commit_cmd.extend(myfiles)
if self.options.pretend:
print("(%s)" % (" ".join(commit_cmd),))
return 0
else:
retval = spawn(commit_cmd, env=self.repo_settings.commit_env)
return retval