예제 #1
0
    protected void Page_Load(object sender, EventArgs e)
    {
        WebServiceResponse  rsp;
        GetReleasesResponse response;
        int release_id;

        string action = Request ["action"];

        response = Utils.LocalWebService.GetReleases(Master.WebServiceLogin);

        if (response.Exception != null)
        {
            lblMessage.Text = response.Exception.Message;
            return;
        }

        if (!string.IsNullOrEmpty(action))
        {
            switch (action)
            {
            case "delete":
                if (int.TryParse(Request ["release_id"], out release_id))
                {
                    rsp = Utils.LocalWebService.DeleteRelease(Master.WebServiceLogin, release_id);
                    if (rsp.Exception != null)
                    {
                        lblMessage.Text = rsp.Exception.Message;
                    }
                    else
                    {
                        Response.Redirect("Releases.aspx", false);
                        return;
                    }
                }
                else
                {
                    lblMessage.Text = "Invalid release";
                }
                break;

            case "download":
                if (string.IsNullOrEmpty(Request ["release_id"]))
                {
                    break;
                }

                if (int.TryParse(Request ["release_id"], out release_id))
                {
                    foreach (DBRelease release in response.Releases)
                    {
                        if (release.id != release_id)
                        {
                            continue;
                        }

                        Response.ContentType = "application/zip";
                        Response.AddHeader("Content-Disposition", "attachment; filename=" + release.filename);
                        Response.TransmitFile(Path.Combine(Configuration.GetReleaseDirectory(), release.filename));
                        return;
                    }
                }
                else if (Request ["release_id"] == "latest")
                {
                    Version   latest         = new Version();
                    DBRelease release_latest = null;

                    foreach (DBRelease release in response.Releases)
                    {
                        Version v = new Version(release.version);
                        if (v <= latest)
                        {
                            continue;
                        }
                        release_latest = release;
                    }

                    if (release_latest == null)
                    {
                        Response.StatusCode        = 404;
                        Response.Status            = "Not found";
                        Response.StatusDescription = "No latest release exists";
                        return;
                    }

                    Response.ContentType = "application/zip";
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + release_latest.filename);
                    Response.TransmitFile(Path.Combine(Configuration.GetReleaseDirectory(), release_latest.filename));
                    return;
                }
                else
                {
                    lblMessage.Text = "Invalid release";
                }
                break;
            }
        }

        foreach (DBRelease release in response.Releases)
        {
            TableRow row = new TableRow();
            row.Cells.Add(Utils.CreateTableCell(release.version));
            row.Cells.Add(Utils.CreateTableCell(release.revision));
            row.Cells.Add(Utils.CreateTableCell(release.description));
            row.Cells.Add(Utils.CreateTableCell(release.filename));
            row.Cells.Add(Utils.CreateTableCell(
                              string.Format("<a href='Releases.aspx?action=delete&amp;release_id={0}'>Delete</a>", release.id) + " " +
                              string.Format("<a href='Releases.aspx?action=download&amp;release_id={0}'>Download</a>", release.id)
                              ));
            tblStatus.Rows.Add(row);
        }
    }
예제 #2
0
    protected void Page_Load(object sender, EventArgs e)
    {
        GetBuildBotStatusResponse response;
        string action;

        response = Utils.LocalWebService.GetBuildBotStatus(Master.WebServiceLogin);

        action = Request ["action"];
        if (!string.IsNullOrEmpty(action))
        {
            switch (action)
            {
            case "select-release": {
                int release_id;
                int host_id;
                if (int.TryParse(Request ["release_id"], out release_id))
                {
                    if (int.TryParse(Request ["host_id"], out host_id))
                    {
                        DBHost host = response.Hosts.Find((v) => v.id == host_id);
                        if (host == null)
                        {
                            lblMessage.Text = "Invalid host id";
                        }
                        else
                        {
                            host.release_id = release_id == 0 ? null : new int?(release_id);
                            Utils.LocalWebService.EditHost(Master.WebServiceLogin, host);
                            Response.Redirect("BuildBotStatus.aspx", false);
                            return;
                        }
                    }
                    else
                    {
                        lblMessage.Text = "Invalid host";
                    }
                }
                else
                {
                    lblMessage.Text = "Invalid release";
                }

                break;
            }
            }
        }

        if (response.Exception != null)
        {
            lblMessage.Text = response.Exception.Message;
        }
        else
        {
            foreach (DBBuildBotStatus status in response.Status)
            {
                DBHost    host = response.Hosts.Find((v) => v.id == status.host_id);
                DBRelease configured_release = host.release_id.HasValue ? response.Releases.Find((v) => v.id == host.release_id.Value) : null;
                TableRow  row = new TableRow();
                row.Cells.Add(Utils.CreateTableCell(host.host));
                row.Cells.Add(Utils.CreateTableCell(status.version));
                row.Cells.Add(Utils.CreateTableCell(status.report_date.ToString("yyyy/MM/dd HH:mm:ss UTC")));
                row.Cells.Add(Utils.CreateTableCell(string.Format("<a href='javascript: selectBuildBotRelease (\"{0}\", {1}, \"{2}\")'>{0}</a>", configured_release == null ? "Manual" : configured_release.version, host.id, tblReleases.ClientID)));
                tblStatus.Rows.Add(row);
            }

            foreach (DBRelease release in response.Releases)
            {
                TableRow row = new TableRow();
                row.Cells.Add(Utils.CreateTableCell(string.Format("<a href='javascript: executeBuildBotSelection ({0})'>Select</a>", release.id)));
                row.Cells.Add(Utils.CreateTableCell(release.version));
                row.Cells.Add(Utils.CreateTableCell(release.revision));
                row.Cells.Add(Utils.CreateTableCell(release.description));
                tblReleases.Rows.Add(row);
            }
            tblReleases.Attributes ["style"] = "display:none";
        }
    }
예제 #3
0
        static void CheckLog(string log_file, BuildInfo info)
        {
            DBRelease release = null;
            string    line, l;
            string    cmd;
            int       index;

            using (FileStream fs = new FileStream(log_file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
                using (StreamReader reader = new StreamReader(fs)) {
                    List <String> files  = new List <string> ();
                    List <string> links  = new List <string> ();
                    List <bool>   hidden = new List <bool> ();

                    while (null != (l = reader.ReadLine()))
                    {
                        line = l;
                        if (line.StartsWith("@Moonbuilder:"))
                        {
                            line = line.Substring("@Moonbuilder:".Length);
                        }
                        else if (line.StartsWith("@MonkeyWrench:"))
                        {
                            line = line.Substring("@MonkeyWrench:".Length);
                        }
                        else
                        {
                            continue;
                        }

                        line = line.TrimStart(' ');

                        index = line.IndexOf(':');
                        if (index == -1)
                        {
                            continue;
                        }

                        cmd  = line.Substring(0, index);
                        line = line.Substring(index + 1);
                        while (line.StartsWith(" "))
                        {
                            line = line.Substring(1);
                        }

                        switch (cmd)
                        {
                        case "AddFile":
                        case "AddHiddenFile":
                            try {
                                Logger.Log("@MonkeyWrench command: '{0}' args: '{1}'", cmd, line);
                                files.Add(line.Trim());
                                hidden.Add(cmd.Contains("Hidden"));
                            } catch (Exception e) {
                                Logger.Log("Error while executing @MonkeyWrench command '{0}': '{1}'", cmd, e.Message);
                            }
                            break;

                        case "AddDirectory":
                        case "AddHiddenDirectory":
                            try {
                                Logger.Log("@MonkeyWrench command: '{0}' args: '{1}'", cmd, line);
                                foreach (string file in Directory.GetFiles(line.Trim()))
                                {
                                    files.Add(file);
                                    hidden.Add(cmd.Contains("Hidden"));
                                }
                            } catch (Exception e) {
                                Logger.Log("Error while executing @MonkeyWrench command '{0}': '{1}'", cmd, e.Message);
                            }
                            break;

                        case "AddFileLink":
                            try {
                                Logger.Log("@MonkeyWrench command: '{0}' args: '{1}'", cmd, line);
                                links.Add(line.Trim());
                            } catch (Exception e) {
                                Logger.Log("Error while executing @MonkeyWrench command '{0}': '{1}'", cmd, e.Message);
                            }
                            break;

                        case "SetSummary":
                            info.work.summary = line;
                            info.work         = WebService.ReportBuildStateSafe(info.work).Work;
                            break;

                        case "AddSummary":
                            info.work.summary += line;
                            info.work          = WebService.ReportBuildStateSafe(info.work).Work;
                            break;

                        case "SetReleaseVersion":
                            if (release == null)
                            {
                                release = new DBRelease();
                            }
                            release.version = line.Trim();
                            break;

                        case "SetReleaseRevision":
                            if (release == null)
                            {
                                release = new DBRelease();
                            }
                            release.revision = line.Trim();
                            break;

                        case "SetReleaseDescription":
                            if (release == null)
                            {
                                release = new DBRelease();
                            }
                            release.description = line.Trim();
                            break;

                        case "AddRelease":
                            if (release == null)
                            {
                                Logger.Log("Invalid @MonkeyWrench command: '{0}: No release created", cmd);
                                break;
                            }

                            WebServiceResponse rsp;

                            try {
                                release.filename = Path.GetFileName(line.Trim());
                                File.Copy(line.Trim(), Path.Combine(Configuration.GetReleaseDirectory(), release.filename), true);
                                rsp = WebService.AddRelease(WebService.WebServiceLogin, release);
                                if (rsp.Exception != null)
                                {
                                    Logger.Log("Error while adding release: {0}", rsp.Exception);
                                }
                            } catch (Exception ex) {
                                Logger.Log("Could not copy release: {0}", ex.ToString());
                            }
                            break;

                        default:
                            Logger.Log("Invalid @MonkeyWrench command: '{0}', entire line: '{1}'", cmd, l);
                            break;
                        }
                    }

                    if (links.Count > 0)
                    {
                        try {
                            WebService.UploadLinks(WebService.WebServiceLogin, info.work, links.ToArray());
                        } catch (Exception ex) {
                            Logger.Log("Could not upload links: {0}", ex);
                        }
                    }

                    WebService.UploadFilesSafe(info.work, files.ToArray(), hidden.ToArray());
                }
            }
        }