blob: 53b8ffeb59c0c8b73ed50ca4cedc740a5a21c8a8 [file] [log] [blame]
# -*- coding:utf-8 -*-
# import our initialized portage instance
from repoman._portage import portage
from portage import os
from repoman._subprocess import repoman_popen
class VCSStatus(object):
'''Determines the status of the vcs repositories
to determine if files are not added'''
def __init__(self, vcs_settings, qatracker):
self.vcs_settings = vcs_settings
self.vcs = vcs_settings.vcs
self.eadded = []
self.qatracker = qatracker
def check(self, check_not_added, checkdir, checkdir_relative, xpkg):
if self.vcs and check_not_added:
vcscheck = getattr(self, 'check_%s' % self.vcs)
vcscheck(checkdir, checkdir_relative, xpkg)
def post_git_hg(self, myf, xpkg):
for l in myf:
if l[:-1][-7:] == ".ebuild":
self.qatracker.add_error(
"ebuild.notadded",
os.path.join(xpkg, os.path.basename(l[:-1])))
myf.close()
def check_git(self, checkdir, checkdir_relative, xpkg):
myf = repoman_popen(
"git ls-files --others %s" %
(portage._shell_quote(checkdir_relative),))
self.post_git_hg(myf, xpkg)
def check_hg(self, checkdir, checkdir_relative, xpkg):
myf = repoman_popen(
"hg status --no-status --unknown %s" %
(portage._shell_quote(checkdir_relative),))
self.post_git_hg(myf, xpkg)
def check_cvs(self, checkdir, checkdir_relative, xpkg):
try:
myf = open(checkdir + "/CVS/Entries", "r")
myl = myf.readlines()
myf.close()
except IOError:
self.qatracker.add_error(
"CVS/Entries.IO_error", checkdir + "/CVS/Entries")
return True
for l in myl:
if l[0] != "/":
continue
splitl = l[1:].split("/")
if not len(splitl):
continue
if splitl[0][-7:] == ".ebuild":
self.eadded.append(splitl[0][:-7])
return True
def check_svn(self, checkdir, checkdir_relative, xpkg):
try:
myf = repoman_popen(
"svn status --depth=files --verbose " +
portage._shell_quote(checkdir))
myl = myf.readlines()
myf.close()
except IOError:
raise
for l in myl:
if l[:1] == "?":
continue
if l[:7] == ' >':
# tree conflict, new in subversion 1.6
continue
l = l.split()[-1]
if l[-7:] == ".ebuild":
self.eadded.append(os.path.basename(l[:-7]))
try:
myf = repoman_popen(
"svn status " +
portage._shell_quote(checkdir))
myl = myf.readlines()
myf.close()
except IOError:
raise
for l in myl:
if l[0] == "A":
l = l.rstrip().split(' ')[-1]
if l[-7:] == ".ebuild":
self.eadded.append(os.path.basename(l[:-7]))
return True
def check_bzr(self, checkdir, checkdir_relative, xpkg):
try:
myf = repoman_popen(
"bzr ls -v --kind=file " +
portage._shell_quote(checkdir))
myl = myf.readlines()
myf.close()
except IOError:
raise
for l in myl:
if l[1:2] == "?":
continue
l = l.split()[-1]
if l[-7:] == ".ebuild":
self.eadded.append(os.path.basename(l[:-7]))
return True