import datetime
+import optparse
import os
import sys
import tempfile
def main():
- pocket, package, commit = sys.argv[1:4]
+ parser = optparse.OptionParser('Usage: %prog pocket package commit')
+ opts, args = parser.parse_args()
+ if len(args) != 3:
+ parser.print_help()
+ return 1
+ pocket, package, commit = args
principal = os.environ['REMOTE_USER']
request_time = datetime.datetime.utcnow()
q_path = os.path.join(b._QUEUE_DIR,
uuid.uuid4()))
try:
- validateBuild(pocket, package, commit)
+ # TODO: clean up this interface.
+ b.ensureValidPackage(package)
+ commit = b.canonicalize_commit(package, commit)
+ b.validateBuild(pocket, package, commit)
except b.InvalidBuild, e:
- print >>sys.stderr, "E: %s" % e
+ msg = "E: %s" % e
+ print >>sys.stderr, msg
+ # Prevent an attack by submitting excessively long arguments
+ args = [arg[:min(len(arg), 80)] for arg in (pocket, package, commit)]
+ b.runHook('failed-submit', args + [principal], stdin_str=msg)
sys.exit(1)
# To keep from triggering the Invirtibuilder before we've actually
# written the file out, first write the queue entry to a temporary
# file, and then move it into the queue directory.
- q = tempfile.NamedTemporaryFile(delete=False)
+ q_fd, q_name = tempfile.mkstemp()
+ q = os.fdopen(q_fd, 'r+')
print >>q, "%s %s %s %s" % (pocket, package, commit, principal)
- os.rename(q.name, q_path)
+ q.close()
+ os.rename(q_name, q_path)
+ short_commit = b.canonicalize_commit(package, commit, shorten=True)
+ b.runHook('post-submit', [pocket, package, short_commit, principal])
+ print '%s, your job to build %s for %s:%s has been submitted!' % (principal, short_commit, package, pocket)
if __name__ == '__main__':