import apt_pkg, apt_inst
import examine_package
import subprocess
+import daklib.daksubprocess
+from sqlalchemy import or_
from daklib.dbconn import *
from daklib.queue import *
from daklib.summarystats import SummaryStats
from daklib.config import Config
from daklib.policy import UploadCopy, PolicyQueueUploadHandler
-from sqlalchemy.sql import not_
# Globals
Options = None
################################################################################
-def claimed_overrides(upload, missing, session):
- source = [upload.source.source]
+def takenover_binaries(upload, missing, session):
+ rows = []
binaries = set([x.package for x in upload.binaries])
- suites = ('unstable','experimental')
for m in missing:
if m['type'] != 'dsc':
- binaries.remove(m['package'])
- return session.query(DBBinary).filter(DBBinary.package.in_(binaries)). \
- join(DBBinary.source). \
- filter(not_(DBSource.source.in_(source))). \
- join(DBBinary.suites). \
- filter(Suite.suite_name.in_(suites))
+ binaries.discard(m['package'])
+ if binaries:
+ source = upload.binaries[0].source.source
+ suite = upload.target_suite.overridesuite or \
+ upload.target_suite.suite_name
+ suites = [s[0] for s in session.query(Suite.suite_name).filter \
+ (or_(Suite.suite_name == suite,
+ Suite.overridesuite == suite)).all()]
+ rows = session.query(DBSource.source, DBBinary.package).distinct(). \
+ filter(DBBinary.package.in_(binaries)). \
+ join(DBBinary.source). \
+ filter(DBSource.source != source). \
+ join(DBBinary.suites). \
+ filter(Suite.suite_name.in_(suites)). \
+ order_by(DBSource.source, DBBinary.package).all()
+ return rows
################################################################################
package = m['package']
section = m['section']
priority = m['priority']
+ included = "" if m['included'] else "NOT UPLOADED"
if indexed:
- line = "(%s): %-20s %-20s %-20s" % (index, package, priority, section)
+ line = "(%s): %-20s %-20s %-20s %s" % (index, package, priority, section, included)
else:
- line = "%-20s %-20s %-20s" % (package, priority, section)
+ line = "%-20s %-20s %-20s %s" % (package, priority, section, included)
line = line.strip()
if not m['valid']:
line = line + ' [!]'
print >>file, line
- claimed = claimed_overrides(upload, missing, session)
- if claimed.count():
- print '\nCLAIMED OVERRIDES'
- for c in claimed:
- print '%s:\t%s' % (c.source.source, c.package)
+ takenover = takenover_binaries(upload, missing, session)
+ if takenover:
+ print '\n\nBINARIES TAKEN OVER\n'
+ for t in takenover:
+ print '%s: %s' % (t[0], t[1])
notes = get_new_comments(upload.policy_queue, upload.changes.source)
for note in notes:
print "\nAuthor: %s\nVersion: %s\nTimestamp: %s\n\n%s" \
type, pkg = pkg.split(':', 1)
else:
type = 'deb'
- if (type, pkg) not in overrides_map:
+ o = overrides_map.get((type, pkg), None)
+ if o is None:
utils.warn("Ignoring unknown package '%s'" % (pkg))
else:
if section.find('/') != -1:
section=section,
component=component,
priority=priority,
+ included=o['included'],
))
return new_overrides
suite_name = upload.target_suite.suite_name
handler = PolicyQueueUploadHandler(upload, session)
missing = [(m['type'], m["package"]) for m in handler.missing_overrides(hints=missing)]
+
+ less_cmd = ("less", "-R", "-")
+ less_process = daklib.daksubprocess.Popen(less_cmd, bufsize=0, stdin=subprocess.PIPE)
try:
- sys.stdout = os.popen("less -R -", 'w', 0)
+ sys.stdout = less_process.stdin
print examine_package.display_changes(suite_name, changes)
source = upload.source
print examined
print examine_package.output_package_relations()
+ less_process.stdin.close()
except IOError as e:
if e.errno == errno.EPIPE:
utils.warn("[examine_package] Caught EPIPE; skipping.")
except KeyboardInterrupt:
utils.warn("[examine_package] Caught C-c; skipping.")
finally:
+ less_process.wait()
sys.stdout = save_stdout
################################################################################
changes=changes,
)
- subprocess.check_call(shell_command, shell=True)
+ daklib.daksubprocess.check_call(shell_command, shell=True)
################################################################################