Beispiel #1
0
def do_create_zip_release(user: User,
                          package: Package,
                          title: str,
                          file,
                          min_v: MinetestRelease = None,
                          max_v: MinetestRelease = None,
                          reason: str = None,
                          commit_hash: str = None):
    check_can_create_release(user, package)

    if commit_hash:
        commit_hash = commit_hash.lower()
        if not (len(commit_hash) == 40
                and re.match(r"^[0-9a-f]+$", commit_hash)):
            raise LogicError(
                400,
                "Invalid commit hash; it must be a 40 character long base16 string"
            )

    uploaded_url, uploaded_path = upload_file(file, "zip", "a zip file")

    rel = PackageRelease()
    rel.package = package
    rel.title = title
    rel.url = uploaded_url
    rel.task_id = uuid()
    rel.commit_hash = commit_hash
    rel.min_rel = min_v
    rel.max_rel = max_v
    db.session.add(rel)

    if reason is None:
        msg = "Created release {}".format(rel.title)
    else:
        msg = "Created release {} ({})".format(rel.title, reason)
    addAuditLog(AuditSeverity.NORMAL, user, msg,
                package.getURL("packages.view"), package)

    db.session.commit()

    checkZipRelease.apply_async((rel.id, uploaded_path), task_id=rel.task_id)

    return rel
Beispiel #2
0
def update_from_release(package):
	if not package.checkPerm(current_user, Permission.REIMPORT_META):
		flash("You don't have permission to reimport meta", "danger")
		return redirect(package.getDetailsURL())

	release = package.releases.first()
	if not release:
		flash("Release needed", "danger")
		return redirect(package.getDetailsURL())

	msg = "Updated meta from latest release"
	addNotification(package.maintainers, current_user, NotificationType.PACKAGE_EDIT,
			msg, package.getDetailsURL(), package)
	severity = AuditSeverity.NORMAL if current_user in package.maintainers else AuditSeverity.EDITOR
	addAuditLog(severity, current_user, msg, package.getDetailsURL(), package)

	db.session.commit()

	task_id = uuid()
	zippath = release.url.replace("/uploads/", app.config["UPLOAD_DIR"])
	checkZipRelease.apply_async((release.id, zippath), task_id=task_id)

	return redirect(url_for("tasks.check", id=task_id, r=package.getEditURL()))
Beispiel #3
0
def create_release(package):
    if not package.checkPerm(current_user, Permission.MAKE_RELEASE):
        return redirect(package.getDetailsURL())

    # Initial form class from post data and default data
    form = CreatePackageReleaseForm()
    if package.repo is not None:
        form["uploadOpt"].choices = [("vcs", "From Git Commit or Branch"),
                                     ("upload", "File Upload")]
        if request.method != "POST":
            form["uploadOpt"].data = "vcs"

    if request.method == "POST" and form.validate():
        if form["uploadOpt"].data == "vcs":
            rel = PackageRelease()
            rel.package = package
            rel.title = form["title"].data
            rel.url = ""
            rel.task_id = uuid()
            rel.min_rel = form["min_rel"].data.getActual()
            rel.max_rel = form["max_rel"].data.getActual()
            db.session.add(rel)
            db.session.commit()

            makeVCSRelease.apply_async((rel.id, form["vcsLabel"].data),
                                       task_id=rel.task_id)

            msg = "{}: Release {} created".format(package.title, rel.title)
            triggerNotif(package.author, current_user, msg, rel.getEditURL())
            db.session.commit()

            return redirect(
                url_for("tasks.check", id=rel.task_id, r=rel.getEditURL()))
        else:
            uploadedUrl, uploadedPath = doFileUpload(form.fileUpload.data,
                                                     "zip", "a zip file")
            if uploadedUrl is not None:
                rel = PackageRelease()
                rel.package = package
                rel.title = form["title"].data
                rel.url = uploadedUrl
                rel.task_id = uuid()
                rel.min_rel = form["min_rel"].data.getActual()
                rel.max_rel = form["max_rel"].data.getActual()
                db.session.add(rel)
                db.session.commit()

                checkZipRelease.apply_async((rel.id, uploadedPath),
                                            task_id=rel.task_id)

                msg = "{}: Release {} created".format(package.title, rel.title)
                triggerNotif(package.author, current_user, msg,
                             rel.getEditURL())
                db.session.commit()

                return redirect(
                    url_for("tasks.check", id=rel.task_id, r=rel.getEditURL()))

    return render_template("packages/release_new.html",
                           package=package,
                           form=form)