本文整理汇总了Golang中github.com/evergreen-ci/evergreen/model.FindOneProjectRef函数的典型用法代码示例。如果您正苦于以下问题:Golang FindOneProjectRef函数的具体用法?Golang FindOneProjectRef怎么用?Golang FindOneProjectRef使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了FindOneProjectRef函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: projectPage
func (uis *UIServer) projectPage(w http.ResponseWriter, r *http.Request) {
_ = MustHaveProjectContext(r)
_ = MustHaveUser(r)
vars := mux.Vars(r)
id := vars["project_id"]
projRef, err := model.FindOneProjectRef(id)
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
projVars, err := model.FindOneProjectVars(id)
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
data := struct {
ProjectRef *model.ProjectRef
ProjectVars *model.ProjectVars
}{projRef, projVars}
// the project context has all projects so make the ui list using all projects
uis.WriteJSON(w, http.StatusOK, data)
}
开发者ID:sr527,项目名称:evergreen,代码行数:28,代码来源:project.go
示例2: CreateTestLocalConfig
// Creates a project ref local config that can be used for testing, with the string identifier given
// and the local config from a path
func CreateTestLocalConfig(testSettings *evergreen.Settings, projectName, projectPath string) error {
if projectPath == "" {
config, err := evergreen.FindConfig(testSettings.ConfigDir)
if err != nil {
return err
}
projectPath = filepath.Join(config, "project", fmt.Sprintf("%v.yml", projectName))
}
projectRef, err := model.FindOneProjectRef(projectName)
if err != nil {
return err
}
if projectRef == nil {
projectRef = &model.ProjectRef{}
}
data, err := ioutil.ReadFile(projectPath)
if err != nil {
return err
}
err = yaml.Unmarshal(data, projectRef)
if err != nil {
return err
}
projectRef.LocalConfig = string(data)
return projectRef.Upsert()
}
开发者ID:himanshugpt,项目名称:evergreen,代码行数:35,代码来源:integration_test_setup.go
示例3: TestCheckProjectSyntax
func TestCheckProjectSyntax(t *testing.T) {
Convey("When validating a project's syntax", t, func() {
Convey("if the project passes all of the validation funcs, no errors"+
" should be returned", func() {
distros := []distro.Distro{
{Id: "test-distro-one"},
{Id: "test-distro-two"},
}
err := testutil.CreateTestLocalConfig(projectValidatorConf, "project_test", "")
So(err, ShouldBeNil)
projectRef, err := model.FindOneProjectRef("project_test")
So(err, ShouldBeNil)
for _, d := range distros {
So(d.Insert(), ShouldBeNil)
}
project, err := model.FindProject("", projectRef)
So(err, ShouldBeNil)
So(CheckProjectSyntax(project), ShouldResemble, []ValidationError{})
})
Reset(func() {
db.Clear(distro.Collection)
})
})
}
开发者ID:tessavitabile,项目名称:evergreen,代码行数:29,代码来源:project_validator_test.go
示例4: reachedFailureLimit
// reachedFailureLimit returns true if task for the previous failure transition alert
// happened too long ago, as determined by some magic math.
func reachedFailureLimit(taskId string) (bool, error) {
t, err := task.FindOne(task.ById(taskId))
if err != nil {
return false, err
}
if t == nil {
return false, fmt.Errorf("task %v not found", taskId)
}
pr, err := model.FindOneProjectRef(t.Project)
if err != nil {
return false, err
}
if pr == nil {
return false, fmt.Errorf("project ref %v not found", t.Project)
}
p, err := model.FindProject(t.Revision, pr)
if err != nil {
return false, err
}
if p == nil {
return false, fmt.Errorf("project %v not found for revision %v", t.Project, t.Revision)
}
v := p.FindBuildVariant(t.BuildVariant)
if v == nil {
return false, fmt.Errorf("build variant %v does not exist in project", t.BuildVariant)
}
batchTime := pr.GetBatchTime(v)
reached := time.Since(t.FinishTime) > (time.Duration(batchTime) * time.Minute * failureLimitMultiplier)
return reached, nil
}
开发者ID:tychoish,项目名称:evergreen,代码行数:33,代码来源:project_triggers.go
示例5: GetPatchedProject
// GetPatchedProject creates and validates a project created by fetching latest commit information from GitHub
// and applying the patch to the latest remote configuration. The error returned can be a validation error.
func GetPatchedProject(p *patch.Patch, settings *evergreen.Settings) (*model.Project, error) {
if p.Version != "" {
return nil, fmt.Errorf("Patch %v already finalized", p.Version)
}
projectRef, err := model.FindOneProjectRef(p.Project)
if err != nil {
return nil, err
}
// try to get the remote project file data at the requested revision
var projectFileBytes []byte
projectFileURL := thirdparty.GetGithubFileURL(
projectRef.Owner,
projectRef.Repo,
projectRef.RemotePath,
p.Githash,
)
githubFile, err := thirdparty.GetGithubFile(settings.Credentials["github"], projectFileURL)
if err != nil {
// if the project file doesn't exist, but our patch includes a project file,
// we try to apply the diff and proceed.
if !(p.ConfigChanged(projectRef.RemotePath) && thirdparty.IsFileNotFound(err)) {
// return an error if the github error is network/auth-related or we aren't patching the config
return nil, fmt.Errorf("Could not get github file at %v: %v", projectFileURL, err)
}
} else {
// we successfully got the project file in base64, so we decode it
projectFileBytes, err = base64.StdEncoding.DecodeString(githubFile.Content)
if err != nil {
return nil, fmt.Errorf("Could not decode github file at %v: %v", projectFileURL, err)
}
}
project := &model.Project{}
if err = model.LoadProjectInto(projectFileBytes, projectRef.Identifier, project); err != nil {
return nil, err
}
// apply remote configuration patch if needed
if p.ConfigChanged(projectRef.RemotePath) {
project, err = model.MakePatchedConfig(p, projectRef.RemotePath, string(projectFileBytes))
if err != nil {
return nil, fmt.Errorf("Could not patch remote configuration file: %v", err)
}
// overwrite project fields with the project ref to disallow tracking a
// different project or doing other crazy things via config patches
errs := CheckProjectSyntax(project)
if len(errs) != 0 {
var message string
for _, err := range errs {
message += fmt.Sprintf("\n\t=> %v", err)
}
return nil, fmt.Errorf(message)
}
}
return project, nil
}
开发者ID:himanshugpt,项目名称:evergreen,代码行数:58,代码来源:patch.go
示例6: TestProjectRef
func TestProjectRef(t *testing.T) {
Convey("When inserting a project ref", t, func() {
err := modelutil.CreateTestLocalConfig(patchTestConfig, "mci-test", "")
So(err, ShouldBeNil)
projectRef, err := model.FindOneProjectRef("mci-test")
So(err, ShouldBeNil)
So(projectRef, ShouldNotBeNil)
So(projectRef.Identifier, ShouldEqual, "mci-test")
})
}
开发者ID:tychoish,项目名称:evergreen,代码行数:10,代码来源:patch_test.go
示例7: GetPatchedProject
// GetPatchedProject creates and validates a project created by fetching latest commit information from GitHub
// and applying the patch to the latest remote configuration. The error returned can be a validation error.
func GetPatchedProject(p *patch.Patch, settings *evergreen.Settings) (*model.Project, error) {
if p.Version != "" {
return nil, fmt.Errorf("Patch %v already finalized", p.Version)
}
projectRef, err := model.FindOneProjectRef(p.Project)
if err != nil {
return nil, err
}
// get the remote file at the requested revision
projectFileURL := thirdparty.GetGithubFileURL(
projectRef.Owner,
projectRef.Repo,
projectRef.RemotePath,
p.Githash,
)
githubFile, err := thirdparty.GetGithubFile(
settings.Credentials["github"],
projectFileURL,
)
if err != nil {
return nil, fmt.Errorf("Could not get github file at %v: %v", projectFileURL, err)
}
projectFileBytes, err := base64.StdEncoding.DecodeString(githubFile.Content)
if err != nil {
return nil, fmt.Errorf("Could not decode github file at %v: %v", projectFileURL, err)
}
project := &model.Project{}
if err = model.LoadProjectInto(projectFileBytes, projectRef.Identifier, project); err != nil {
return nil, err
}
// apply remote configuration patch if needed
if p.ConfigChanged(projectRef.RemotePath) {
project, err = model.MakePatchedConfig(p, projectRef.RemotePath, string(projectFileBytes))
if err != nil {
return nil, fmt.Errorf("Could not patch remote configuration file: %v", err)
}
// overwrite project fields with the project ref to disallow tracking a
// different project or doing other crazy things via config patches
errs := CheckProjectSyntax(project)
if len(errs) != 0 {
var message string
for _, err := range errs {
message += fmt.Sprintf("\n\t=> %v", err)
}
return nil, fmt.Errorf(message)
}
}
return project, nil
}
开发者ID:amidvidy,项目名称:evergreen,代码行数:56,代码来源:patch.go
示例8: getProjectRef
// gets the project ref project name corresponding to this identifier
func getProjectRef(identifier string) (projectRef *model.ProjectRef,
err error) {
if cachedProjectRef[identifier] == nil {
projectRef, err = model.FindOneProjectRef(identifier)
if err != nil {
return
}
cachedProjectRecords[identifier] = projectRef
return projectRef, nil
}
return cachedProjectRef[identifier], nil
}
开发者ID:himanshugpt,项目名称:evergreen,代码行数:13,代码来源:notify.go
示例9: fetchProjectRef
// fetchProjectRef returns a project ref given the project identifier
func (as *APIServer) fetchProjectRef(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
id := vars["identifier"]
projectRef, err := model.FindOneProjectRef(id)
if err != nil {
as.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
if projectRef == nil {
http.Error(w, fmt.Sprintf("no project found named '%v'", id), http.StatusNotFound)
return
}
as.WriteJSON(w, http.StatusOK, projectRef)
}
开发者ID:himanshugpt,项目名称:evergreen,代码行数:15,代码来源:api.go
示例10: listVariants
func (as *APIServer) listVariants(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
id := vars["projectId"]
projectRef, err := model.FindOneProjectRef(id)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
project, err := model.FindProject("", projectRef)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
as.WriteJSON(w, http.StatusOK, project.BuildVariants)
}
开发者ID:tychoish,项目名称:evergreen,代码行数:15,代码来源:api.go
示例11: findProject
// findProject is a wrapper around FindProjectRef that caches results by their ID to prevent
// redundantly querying for the same projectref over and over again.
func (qp *QueueProcessor) findProject(projectId string) (*model.ProjectRef, error) {
if qp.projectsCache == nil { // lazily initialize the cache
qp.projectsCache = map[string]*model.ProjectRef{}
}
if project, ok := qp.projectsCache[projectId]; ok {
return project, nil
}
project, err := model.FindOneProjectRef(projectId)
if err != nil {
return nil, err
}
if project == nil {
return nil, nil
}
qp.projectsCache[projectId] = project
return project, nil
}
开发者ID:pritten,项目名称:evergreen,代码行数:19,代码来源:alerts.go
示例12: addProject
func (uis *UIServer) addProject(w http.ResponseWriter, r *http.Request) {
dbUser := MustHaveUser(r)
_ = MustHaveProjectContext(r)
vars := mux.Vars(r)
id := vars["project_id"]
projectRef, err := model.FindOneProjectRef(id)
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
if projectRef != nil {
http.Error(w, "Project already exists", http.StatusInternalServerError)
return
}
newProject := model.ProjectRef{
Identifier: id,
Enabled: true,
Tracked: true,
RepoKind: "github",
}
err = newProject.Insert()
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
allProjects, err := uis.filterAuthorizedProjects(dbUser)
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
data := struct {
Available bool
ProjectId string
AllProjects []model.ProjectRef
}{true, id, allProjects}
uis.WriteJSON(w, http.StatusOK, data)
}
开发者ID:tychoish,项目名称:evergreen,代码行数:46,代码来源:project.go
示例13: GetProjectRef
func (as *APIServer) GetProjectRef(w http.ResponseWriter, r *http.Request) {
task := MustHaveTask(r)
p, err := model.FindOneProjectRef(task.Project)
if err != nil {
as.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
if p == nil {
http.Error(w, "project ref not found", http.StatusNotFound)
return
}
as.WriteJSON(w, http.StatusOK, p)
}
开发者ID:himanshugpt,项目名称:evergreen,代码行数:17,代码来源:api.go
示例14: getTaskHistory
func (restapi restAPI) getTaskHistory(w http.ResponseWriter, r *http.Request) {
taskName := mux.Vars(r)["task_name"]
projectName := r.FormValue("project")
projectRef, err := model.FindOneProjectRef(projectName)
if err != nil || projectRef == nil {
msg := fmt.Sprintf("Error finding project '%v'", projectName)
statusCode := http.StatusNotFound
if err != nil {
evergreen.Logger.Logf(slogger.ERROR, "%v: %v", msg, err)
statusCode = http.StatusInternalServerError
}
restapi.WriteJSON(w, statusCode, responseError{Message: msg})
return
}
project, err := model.FindProject("", projectRef)
if err != nil {
msg := fmt.Sprintf("Error finding project '%v'", projectName)
evergreen.Logger.Logf(slogger.ERROR, "%v: %v", msg, err)
restapi.WriteJSON(w, http.StatusInternalServerError, responseError{Message: msg})
return
}
buildVariants := project.GetVariantsWithTask(taskName)
iter := model.NewTaskHistoryIterator(taskName, buildVariants, project.Identifier)
chunk, err := iter.GetChunk(nil, MaxNumRevisions, NoRevisions, false)
if err != nil {
msg := fmt.Sprintf("Error finding history for task '%v'", taskName)
evergreen.Logger.Logf(slogger.ERROR, "%v: %v", msg, err)
restapi.WriteJSON(w, http.StatusInternalServerError, responseError{Message: msg})
return
}
restapi.WriteJSON(w, http.StatusOK, chunk)
return
}
开发者ID:amidvidy,项目名称:evergreen,代码行数:42,代码来源:task_history.go
示例15: setRevision
// setRevision sets the latest revision in the Repository
// database to the revision sent from the projects page.
func (uis *UIServer) setRevision(w http.ResponseWriter, r *http.Request) {
MustHaveUser(r)
vars := mux.Vars(r)
id := vars["project_id"]
data, err := ioutil.ReadAll(r.Body)
if err != nil {
uis.LoggedError(w, r, http.StatusNotFound, err)
return
}
revision := string(data)
if revision == "" {
uis.LoggedError(w, r, http.StatusBadRequest, fmt.Errorf("revision sent was empty"))
return
}
// update the latest revision to be the revision id
err = model.UpdateLastRevision(id, revision)
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
// update the projectRef too
projectRef, err := model.FindOneProjectRef(id)
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
projectRef.RepotrackerError.Exists = false
projectRef.RepotrackerError.InvalidRevision = ""
projectRef.RepotrackerError.MergeBaseRevision = ""
err = projectRef.Upsert()
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
uis.WriteJSON(w, http.StatusOK, nil)
}
开发者ID:sr527,项目名称:evergreen,代码行数:43,代码来源:project.go
示例16: listTasks
func (as *APIServer) listTasks(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
id := vars["projectId"]
projectRef, err := model.FindOneProjectRef(id)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
project, err := model.FindProject("", projectRef)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// zero out the depends on and commands fields because they are
// unnecessary and may not get marshaled properly
for i := range project.Tasks {
project.Tasks[i].DependsOn = []model.TaskDependency{}
project.Tasks[i].Commands = []model.PluginCommandConf{}
}
as.WriteJSON(w, http.StatusOK, project.Tasks)
}
开发者ID:tychoish,项目名称:evergreen,代码行数:23,代码来源:api.go
示例17: modifyProject
func (uis *UIServer) modifyProject(w http.ResponseWriter, r *http.Request) {
_ = MustHaveUser(r)
vars := mux.Vars(r)
id := vars["project_id"]
projectRef, err := model.FindOneProjectRef(id)
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
if projectRef == nil {
http.Error(w, "Project not found", http.StatusNotFound)
return
}
responseRef := struct {
Identifier string `json:"id"`
DisplayName string `json:"display_name"`
RemotePath string `json:"remote_path"`
BatchTime int `json:"batch_time"`
DeactivatePrevious bool `json:"deactivate_previous"`
Branch string `json:"branch_name"`
ProjVarsMap map[string]string `json:"project_vars"`
Enabled bool `json:"enabled"`
Private bool `json:"private"`
Owner string `json:"owner_name"`
Repo string `json:"repo_name"`
AlertConfig map[string][]struct {
Provider string `json:"provider"`
Settings map[string]interface{} `json:"settings"`
} `json:"alert_config"`
}{}
err = util.ReadJSONInto(r.Body, &responseRef)
if err != nil {
http.Error(w, fmt.Sprintf("Error parsing request body %v", err), http.StatusInternalServerError)
return
}
projectRef.DisplayName = responseRef.DisplayName
projectRef.RemotePath = responseRef.RemotePath
projectRef.BatchTime = responseRef.BatchTime
projectRef.Branch = responseRef.Branch
projectRef.Enabled = responseRef.Enabled
projectRef.Private = responseRef.Private
projectRef.Owner = responseRef.Owner
projectRef.DeactivatePrevious = responseRef.DeactivatePrevious
projectRef.Repo = responseRef.Repo
projectRef.Identifier = id
projectRef.Alerts = map[string][]model.AlertConfig{}
for triggerId, alerts := range responseRef.AlertConfig {
//TODO validate the triggerID, provider, and settings.
for _, alert := range alerts {
projectRef.Alerts[triggerId] = append(projectRef.Alerts[triggerId], model.AlertConfig{
Provider: alert.Provider,
Settings: bson.M(alert.Settings),
})
}
}
err = projectRef.Upsert()
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
//modify project vars if necessary
projectVars := model.ProjectVars{id, responseRef.ProjVarsMap}
_, err = projectVars.Upsert()
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
allProjects, err := model.FindAllProjectRefs()
if err != nil {
uis.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
data := struct {
AllProjects []model.ProjectRef
}{allProjects}
uis.WriteJSON(w, http.StatusOK, data)
}
开发者ID:sr527,项目名称:evergreen,代码行数:94,代码来源:project.go
示例18: ManifestLoadHandler
// ManifestLoadHandler attempts to get the manifest, if it exists it updates the expansions and returns
// If it does not exist it performs GitHub API calls for each of the project's modules and gets
// the head revision of the branch and inserts it into the manifest collection.
// If there is a duplicate key error, then do a find on the manifest again.
func (mp *ManifestPlugin) ManifestLoadHandler(w http.ResponseWriter, r *http.Request) {
task := plugin.GetTask(r)
projectRef, err := model.FindOneProjectRef(task.Project)
if err != nil {
http.Error(w, fmt.Sprintf("projectRef not found for project %v: %v", task.Project, err), http.StatusNotFound)
return
}
project, err := model.FindProject("", projectRef)
if err != nil {
http.Error(w, fmt.Sprintf("project not found for ProjectRef %v: %v", projectRef.Identifier, err),
http.StatusNotFound)
return
}
if project == nil {
http.Error(w, fmt.Sprintf("empty project not found for ProjectRef %v: %v", projectRef.Identifier, err),
http.StatusNotFound)
return
}
// try to get the manifest
currentManifest, err := manifest.FindOne(manifest.ById(task.Version))
if err != nil {
http.Error(w, fmt.Sprintf("error retrieving manifest with version id %v: %v", task.Version, err),
http.StatusNotFound)
return
}
if currentManifest != nil {
plugin.WriteJSON(w, http.StatusOK, currentManifest)
return
}
if task.Version == "" {
http.Error(w, fmt.Sprintf("versionId is empty"), http.StatusNotFound)
return
}
// attempt to insert a manifest after making GitHub API calls
newManifest := &manifest.Manifest{
Id: task.Version,
Revision: task.Revision,
ProjectName: task.Project,
Branch: project.Branch,
}
// populate modules
modules := make(map[string]*manifest.Module)
for _, module := range project.Modules {
owner, repo := module.GetRepoOwnerAndName()
gitBranch, err := thirdparty.GetBranchEvent(mp.OAuthCredentials, owner, repo, module.Branch)
if err != nil {
http.Error(w, fmt.Sprintf("error retrieving getting git branch for module %v: %v", module.Name, err),
http.StatusNotFound)
return
}
modules[module.Name] = &manifest.Module{
Branch: module.Branch,
Revision: gitBranch.Commit.SHA,
Repo: repo,
Owner: owner,
URL: gitBranch.Commit.Url,
}
}
newManifest.Modules = modules
duplicate, err := newManifest.TryInsert()
if err != nil {
http.Error(w, fmt.Sprintf("error inserting manifest for %v: %v", newManifest.ProjectName, err),
http.StatusNotFound)
return
}
// if it is a duplicate, load the manifest again`
if duplicate {
// try to get the manifest
m, err := manifest.FindOne(manifest.ById(task.Version))
if err != nil {
http.Error(w, fmt.Sprintf("error getting latest manifest for %v: %v", newManifest.ProjectName, err),
http.StatusNotFound)
return
}
if m != nil {
plugin.WriteJSON(w, http.StatusOK, m)
return
}
}
// no duplicate key error, use the manifest just created.
plugin.WriteJSON(w, http.StatusOK, newManifest)
return
}
开发者ID:tychoish,项目名称:evergreen,代码行数:93,代码来源:load_command.go
示例19: LoadProjectContext
// LoadProjectContext builds a projectContext from vars in the request's URL.
// This is done by reading in specific variables and inferring other required
// context variables when necessary (e.g. loading a project based on the task).
func (uis *UIServer) LoadProjectContext(rw http.ResponseWriter, r *http.Request) (projectContext, error) {
user := GetUser(r)
vars := mux.Vars(r)
proj := &projectContext{}
taskId := vars["task_id"]
buildId := vars["build_id"]
versionId := vars["version_id"]
patchId := vars["patch_id"]
err := proj.populateProjectRefs(user != nil)
if err != nil {
return *proj, err
}
projectId, err := proj.populateTaskBuildVersion(taskId, buildId, versionId)
if err != nil {
return *proj, err
}
err = proj.populatePatch(patchId)
if err != nil {
return *proj, err
}
if proj.Patch != nil && len(projectId) == 0 {
projectId = proj.Patch.Project
}
// Try to infer project ID - if we don't already have it from the task/build/version, try to
// get it from the URL
if len(projectId) == 0 {
projectId = vars["project_id"]
}
usingDefault := false
// Still don't have a project ID to use, check if the user's cookie contains one
if len(projectId) == 0 {
cookie, err := r.Cookie(ProjectCookieName)
if err == nil {
projectId = cookie.Value
}
usingDefault = true
}
// Still no project ID found anywhere, just use the default one according to config.
if len(projectId) == 0 {
projectId = uis.Settings.Ui.DefaultProject
usingDefault = true
}
// Try to load project for the ID we found, and set cookie with it for subsequent requests
if len(projectId) > 0 {
// Also lookup the ProjectRef itself and add it to context.
proj.ProjectRef, err = model.FindOneProjectRef(projectId)
if err != nil {
return *proj, err
}
// If we used the default project or a cookie to choose the project,
// but that project doesn't exist, choose the first one in the list.
if usingDefault && proj.ProjectRef == nil {
if len(proj.AllProjects) > 0 {
proj.ProjectRef = &proj.AllProjects[0]
}
}
if proj.ProjectRef != nil {
proj.Project, err = model.FindProject("", proj.ProjectRef)
if err != nil {
return *proj, err
}
if proj.Project != nil {
// A project was found, update the project cookie for subsequent request.
http.SetCookie(rw, &http.Cookie{
Name: ProjectCookieName,
Value: projectId,
Path: "",
Expires: time.Now().Add(7 * 24 * time.Hour),
})
}
}
}
proj.AuthRedirect = uis.UserManager.IsRedirect()
return *proj, nil
}
开发者ID:pritten,项目名称:evergreen,代码行数:93,代码来源:middleware.go
示例20: updatePatchModule
func (as *APIServer) updatePatchModule(w http.ResponseWriter, r *http.Request) {
p, err := getPatchFromRequest(r)
if err != nil {
as.WriteJSON(w, http.StatusBadRequest, err.Error())
return
}
moduleName := r.FormValue("module")
patchContent := r.FormValue("patch")
githash := r.FormValue("githash")
projectRef, err := model.FindOneProjectRef(p.Project)
if err != nil {
as.LoggedError(w, r, http.StatusInternalServerError, fmt.Errorf("Error getting project ref with id %v: %v", p.Project, err))
return
}
project, err := model.FindProject("", projectRef)
if err != nil {
as.LoggedError(w, r, http.StatusInternalServerError, fmt.Errorf("Error getting patch: %v", err))
return
}
if project == nil {
as.LoggedError(w, r, http.StatusNotFound, fmt.Errorf("can't find project: %v", p.Project))
return
}
module, err := project.GetModuleByName(moduleName)
if err != nil || module == nil {
as.LoggedError(w, r, http.StatusBadRequest, fmt.Errorf("No such module"))
return
}
gitOutput, err := thirdparty.GitApplyNumstat(patchContent)
if err != nil {
as.WriteJSON(w, http.StatusBadRequest, fmt.Errorf("Invalid patch: %v", err))
return
}
if gitOutput == nil {
as.WriteJSON(w, http.StatusBadRequest, fmt.Errorf("Empty diff"))
return
}
summaries, err := thirdparty.ParseGitSummary(gitOutput)
if err != nil {
as.WriteJSON(w, http.StatusBadRequest, fmt.Errorf("Can't validate patch: %v", err))
return
}
repoOwner, repo := module.GetRepoOwnerAndName()
commitInfo, err := thirdparty.GetCommitEvent(as.Settings.Credentials[projectRef.RepoKind], repoOwner, repo, githash)
if err != nil {
as.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
if commitInfo == nil {
as.WriteJSON(w, http.StatusBadRequest, fmt.Errorf("commit hash doesn't seem to exist"))
return
}
modulePatch := patch.ModulePatch{
ModuleName: moduleName,
Githash: githash,
PatchSet: patch.PatchSet{
Patch: patchContent,
Summary: summaries, // thirdparty.GetPatchSummary(apiRequest.PatchContent),
},
}
if err = p.UpdateModulePatch(modulePatch); err != nil {
as.LoggedError(w, r, http.StatusInternalServerError, err)
return
}
as.WriteJSON(w, http.StatusOK, "Patch module updated")
return
}
开发者ID:MauroJr,项目名称:evergreen,代码行数:77,代码来源:patch_api.go
注:本文中的github.com/evergreen-ci/evergreen/model.FindOneProjectRef函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论