import daklib.utils
from types import *
+from syck import *
+
################################################################################
o control.tar.gz
o data.tar.gz or data.tar.bz2
-in that order, and nothing else. If the third member is a
-data.tar.bz2, an additional check is performed for the required
-Pre-Depends on dpkg (>= 1.10.24)."""
+in that order, and nothing else."""
cmd = "ar t %s" % (filename)
(result, output) = commands.getstatusoutput(cmd)
if result != 0:
reject("%s: first chunk is '%s', expected 'debian-binary'." % (filename, chunks[0]))
if chunks[1] != "control.tar.gz":
reject("%s: second chunk is '%s', expected 'control.tar.gz'." % (filename, chunks[1]))
- if chunks[2] == "data.tar.bz2":
- # Packages using bzip2 compression must have a Pre-Depends on dpkg >= 1.10.24.
- found_needed_predep = 0
- for parsed_dep in apt_pkg.ParseDepends(control.Find("Pre-Depends", "")):
- for atom in parsed_dep:
- (dep, version, constraint) = atom
- if dep != "dpkg" or (constraint != ">=" and constraint != ">>") or \
- len(parsed_dep) > 1: # or'ed deps don't count
- continue
- if (constraint == ">=" and apt_pkg.VersionCompare(version, "1.10.24") < 0) or \
- (constraint == ">>" and apt_pkg.VersionCompare(version, "1.10.23") < 0):
- continue
- found_needed_predep = 1
- if not found_needed_predep:
- reject("%s: uses bzip2 compression, but doesn't Pre-Depend on dpkg (>= 1.10.24)" % (filename))
- elif chunks[2] != "data.tar.gz":
+ if chunks[2] not in [ "data.tar.bz2", "data.tar.gz" ]:
reject("%s: third chunk is '%s', expected 'data.tar.gz' or 'data.tar.bz2'." % (filename, chunks[2]))
################################################################################
for file in file_keys:
# Ensure the file does not already exist in one of the accepted directories
- for dir in [ "Accepted", "Byhand", "New", "ProposedUpdates", "OldProposedUpdates" ]:
+ for dir in [ "Accepted", "Byhand", "New", "ProposedUpdates", "OldProposedUpdates", "Embargoed", "Unembargoed" ]:
+ if not Cnf.has_key("Dir::Queue::%s" % (dir)): continue
if os.path.exists(Cnf["Dir::Queue::%s" % (dir) ]+'/'+file):
reject("%s file already exists in the %s directory." % (file, dir))
if not daklib.utils.re_taint_free.match(file):
files[file]["type"] = "unreadable"
continue
# If it's byhand skip remaining checks
- if files[file]["section"] == "byhand" or files[file]["section"][4:] == "raw-":
+ if files[file]["section"] == "byhand" or files[file]["section"][:4] == "raw-":
files[file]["byhand"] = 1
files[file]["type"] = "byhand"
# Checks for a binary package...
os.chdir(cwd)
return too_new
+################################################################################
+################################################################################
+
+# We reject packages if the release team defined a transition for them
+def check_transition():
+ to_dump = 0
+
+ # Only check if there is a file defined with checks. It's a little bit
+ # specific to Debian, not much use for others, so return early there.
+ if not Cnf.has_key("Dinstall::Reject::ReleaseTransitions"):
+ return
+
+ # No need to do anything if this upload has no source included
+ if not changes["architecture"].has_key("source"):
+ return
+
+ # We first load the current set of transitions, if any
+ if not os.path.exists("%s" % (Cnf["Dinstall::Reject::ReleaseTransitions"])):
+ # Nothing to do, no file exists
+ return
+ # Parse the yaml file
+ sourcefile = file(Cnf["Dinstall::Reject::ReleaseTransitions"], 'r')
+ transitions = load(sourcefile)
+
+ # Now look through all defined transitions
+ for trans in transition:
+ t = transition[trans]
+ # We check if the transition is still valid
+ # If not we remove the whole setting from the dictionary and later dump it,
+ # so we don't process it again.
+ source = t["source"]
+ new_vers = t["new"]
+ q = Upload.projectB.query("""
+ SELECT s.version FROM source s, suite su, src_associations sa
+ WHERE sa.source=s.id
+ AND sa.suite=su.id
+ AND su.suite_name='testing'
+ AND s.source='%s'"""
+ % (source))
+ ql = q.getresult()
+ if ql:
+ current_vers = ql[0][0]
+ if apt_pkg.VersionCompare(new_vers, current_vers) == 1:
+ # This is still valid, the current version in database is older than
+ # the new version we wait for
+
+ # Check if the source we look at is affected by this.
+ if changes["source"] in t['packages']:
+ # The source is affected, lets reject it.
+ reject("""%s: part of the %s transition.
+
+ Your package is part of a testing transition to get %s migrated.
+
+ Transition reason: %s
+
+ This transition will finish when %s, version %s, reaches testing.
+ This transition is managed by the Release Team and %s
+ is the Release-Team member responsible for it.
+ Please contact them or debian-release@lists.debian.org if you
+ need further assistance.
+ """
+ % (changes["source"], trans, source, t["reason"], source, new_vers, t["rm"]))
+ return 0
+ else:
+ # We either have the wanted or a newer version in testing, or the package got
+ # removed completly. In that case we don't need to keep the transition blocker
+ del transition[trans]
+ to_dump = 1
+
+ if to_dump:
+ destfile = file(Cnf["Dinstall::Reject::ReleaseTransitions"], 'w')
+ dump(transition, destfile)
+
################################################################################
def action ():
################################################################################
def is_embargo ():
- return 0
+ # if embargoed queues are enabled always embargo
+ return 1
def queue_embargo (summary, short_summary):
print "Moving to EMBARGOED holding area."
check_urgency()
check_timestamps()
check_signed_by_key()
+ check_transition()
Upload.update_subst(reject_message)
action()
except SystemExit: