X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fqueue_install.py;h=b1c2f55e049a7deaab1e87a65b857c0437eb53d8;hb=904ac9b520fb3a9449a42f7f26e71c372789227d;hp=1671c721e5ad53a8910e006aac77a933d3ec2424;hpb=db4d3b713caf2fdc24b44d08214a6a9b1b006f17;p=dak.git diff --git a/daklib/queue_install.py b/daklib/queue_install.py index 1671c721..b1c2f55e 100755 --- a/daklib/queue_install.py +++ b/daklib/queue_install.py @@ -26,6 +26,7 @@ Utility functions for process-upload # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import os +from shutil import copyfile from daklib import utils from daklib.dbconn import * @@ -34,24 +35,24 @@ from daklib.config import Config ################################################################################ def package_to_suite(u, suite_name, session): - if not u.pkg.changes["distribution"].has_key(suite_name): + if suite_name not in u.pkg.changes["distribution"]: return False - ret = True + if 'source' in u.pkg.changes["architecture"]: + return True - if not u.pkg.changes["architecture"].has_key("source"): - q = session.query(SrcAssociation.sa_id) - q = q.join(Suite).filter_by(suite_name=suite_name) - q = q.join(DBSource).filter_by(source=u.pkg.changes['source']) - q = q.filter_by(version=u.pkg.changes['version']).limit(1) + q = session.query(Suite).filter_by(suite_name = suite_name). \ + filter(Suite.sources.any( \ + source = u.pkg.changes['source'], \ + version = u.pkg.changes['version'])) - # NB: Careful, this logic isn't what you would think it is - # Source is already in the target suite so no need to go to policy - # Instead, we don't move to the policy area, we just do an ACCEPT - if q.count() > 0: - ret = False - - return ret + # NB: Careful, this logic isn't what you would think it is + # Source is already in the target suite so no need to go to policy + # Instead, we don't move to the policy area, we just do an ACCEPT + if q.count() > 0: + return False + else: + return True def package_to_queue(u, summary, short_summary, queue, chg, session, announce=None): cnf = Config() @@ -87,6 +88,12 @@ def is_unembargo(u): if not get_policy_queue("disembargo"): return False + # If we already are in newstage, then it means this just got passed through and accepted + # by a security team member. Don't try to accept it for disembargo again + dbc = get_dbchange(u.pkg.changes_file, session) + if dbc and dbc.in_queue.queue_name in [ 'newstage' ]: + return False + q = session.execute("SELECT package FROM disembargo WHERE package = :source AND version = :version", {'source': u.pkg.changes["source"], 'version': u.pkg.changes["version"]}) @@ -103,7 +110,7 @@ def is_unembargo(u): if u.pkg.directory == disdir: if u.pkg.changes["architecture"].has_key("source"): - session.execute("INSERT INTO disembargo (package, version) VALUES (:package, :version)", + session.execute("INSERT INTO disembargo (package, version) VALUES (:source, :version)", {'source': u.pkg.changes["source"], 'version': u.pkg.changes["version"]}) session.commit() @@ -114,23 +121,42 @@ def is_unembargo(u): return ret -def queue_unembargo(u, summary, short_summary, session=None): - return package_to_queue(u, summary, short_summary, - get_policy_queue('disembargo'), chg, session, - announce=None) +def do_unembargo(u, summary, short_summary, chg, session=None): + polq=get_policy_queue('disembargo') + package_to_queue(u, summary, short_summary, + polq, chg, session, + announce=None) + for suite_name in u.pkg.changes["distribution"].keys(): + suite = get_suite(suite_name, session) + for q in suite.copy_queues: + for f in u.pkg.files.keys(): + copyfile(os.path.join(polq.path, f), os.path.join(q.path, f)) # ################################################################################# # def is_embargo(u): # if we are the security archive, we always have a embargo queue and its the # last in line, so if that exists, return true + # Of course do not return true when we accept from out of newstage, as that means + # it just left embargo and we want it in the archive if get_policy_queue('embargo'): + session = DBConn().session() + dbc = get_dbchange(u.pkg.changes_file, session) + if dbc and dbc.in_queue.queue_name in [ 'newstage' ]: + return False + return True -def queue_embargo(u, summary, short_summary, session=None): - return package_to_queue(u, summary, short_summary, - get_policy_queue('embargo'), chg, session, - announce=None) +def do_embargo(u, summary, short_summary, chg, session=None): + polq=get_policy_queue('embargo') + package_to_queue(u, summary, short_summary, + polq, chg, session, + announce=None) + for suite_name in u.pkg.changes["distribution"].keys(): + suite = get_suite(suite_name, session) + for q in suite.copy_queues: + for f in u.pkg.files.keys(): + copyfile(os.path.join(polq.path, f), os.path.join(q.path, f)) ################################################################################ @@ -251,13 +277,16 @@ def acknowledge_new(u, summary, short_summary, chg, session): ################################################################################ +# FIXME: queues should be able to get autobuild +# the current logic doesnt allow this, as buildd stuff is AFTER accept... +# embargo/disembargo use a workaround due to this # q-unapproved hax0ring QueueInfo = { "new": { "is": is_new, "process": acknowledge_new }, "autobyhand" : { "is" : is_autobyhand, "process": do_autobyhand }, "byhand" : { "is": is_byhand, "process": do_byhand }, - "embargoed" : { "is": is_embargoed, "process": do_embargoed }, - "unembargoed" : { "is": is_unembargoed, "process": do_unembargoed }, + "embargoed" : { "is": is_embargo, "process": do_embargo }, + "unembargoed" : { "is": is_unembargo, "process": do_unembargo }, } def determine_target(u):