patch

package
v0.0.0-...-418c65a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 26, 2019 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Collection   = "patches"
	GridFSPrefix = "patchfiles"
)
View Source
const (
	// IntentCollection is the database collection that stores patch intents.
	IntentCollection = "patch_intents"

	// GithubIntentType represents patch intents created for GitHub.
	GithubIntentType = "github"

	// GithubAlias is a special alias to specify default variants and tasks for GitHub pull requests.
	GithubAlias = "__github"
)
View Source
const CliIntentType = "cli"
View Source
const SizeLimit = 1024 * 1024 * 100

SizeLimit is a hard limit on patch size.

Variables

View Source
var (
	IdKey            = bsonutil.MustHaveTag(Patch{}, "Id")
	DescriptionKey   = bsonutil.MustHaveTag(Patch{}, "Description")
	ProjectKey       = bsonutil.MustHaveTag(Patch{}, "Project")
	GithashKey       = bsonutil.MustHaveTag(Patch{}, "Githash")
	AuthorKey        = bsonutil.MustHaveTag(Patch{}, "Author")
	NumberKey        = bsonutil.MustHaveTag(Patch{}, "PatchNumber")
	VersionKey       = bsonutil.MustHaveTag(Patch{}, "Version")
	StatusKey        = bsonutil.MustHaveTag(Patch{}, "Status")
	CreateTimeKey    = bsonutil.MustHaveTag(Patch{}, "CreateTime")
	StartTimeKey     = bsonutil.MustHaveTag(Patch{}, "StartTime")
	FinishTimeKey    = bsonutil.MustHaveTag(Patch{}, "FinishTime")
	BuildVariantsKey = bsonutil.MustHaveTag(Patch{}, "BuildVariants")
	TasksKey         = bsonutil.MustHaveTag(Patch{}, "Tasks")
	VariantsTasksKey = bsonutil.MustHaveTag(Patch{}, "VariantsTasks")
	PatchesKey       = bsonutil.MustHaveTag(Patch{}, "Patches")
	ActivatedKey     = bsonutil.MustHaveTag(Patch{}, "Activated")
	PatchedConfigKey = bsonutil.MustHaveTag(Patch{}, "PatchedConfig")
	AliasKey         = bsonutil.MustHaveTag(Patch{}, "Alias")

	// BSON fields for the module patch struct
	ModulePatchNameKey    = bsonutil.MustHaveTag(ModulePatch{}, "ModuleName")
	ModulePatchGithashKey = bsonutil.MustHaveTag(ModulePatch{}, "Githash")
	ModulePatchSetKey     = bsonutil.MustHaveTag(ModulePatch{}, "PatchSet")

	// BSON fields for the patch set struct
	PatchSetPatchKey   = bsonutil.MustHaveTag(PatchSet{}, "Patch")
	PatchSetSummaryKey = bsonutil.MustHaveTag(PatchSet{}, "Summary")

	// BSON fields for the git patch summary struct
	GitSummaryNameKey      = bsonutil.MustHaveTag(Summary{}, "Name")
	GitSummaryAdditionsKey = bsonutil.MustHaveTag(Summary{}, "Additions")
	GitSummaryDeletionsKey = bsonutil.MustHaveTag(Summary{}, "Deletions")
)

BSON fields for the patches nolint: deadcode, megacheck, unused

ExcludePatchDiff is a projection that excludes diff data, helping load times.

Functions

func ByGithubPRAndCreatedBefore

func ByGithubPRAndCreatedBefore(t time.Time, owner, repo string, prNumber int) db.Q

func ById

func ById(id mgobson.ObjectId) db.Q

ById produces a query to return the patch with the given _id.

func ByProject

func ByProject(project string) db.Q

ByProject produces a query that returns projects with the given identifier.

func ByUser

func ByUser(user string) db.Q

ByUser produces a query that returns patches by the given user.

func ByUserPaginated

func ByUserPaginated(user string, ts time.Time, limit int) db.Q

ByUserPaginated produces a query that returns patches by the given user before/after the input time, sorted by creation time and limited

func ByUserProjectAndGitspec

func ByUserProjectAndGitspec(user string, project string, gitspec string) db.Q

ByUserProjectAndGitspec produces a query that returns patches by the given patch author, project, and gitspec.

func ByVersion

func ByVersion(version string) db.Q

ByVersion produces a query that returns the patch for a given version.

func ByVersions

func ByVersions(versions []string) db.Q

ByVersion produces a query that returns the patch for a given version.

func Count

func Count(query db.Q) (int, error)

Count returns the number of patches that satisfy the given query.

func FindUnprocessedGithubIntents

func FindUnprocessedGithubIntents() ([]*githubIntent, error)

FindUnprocessedGithubIntents finds all patch intents that have not yet been processed.

func IsValidId

func IsValidId(id string) bool

IsValidId returns whether the supplied Id is a valid patch doc id (BSON ObjectId).

func NewId

func NewId(id string) mgobson.ObjectId

NewId constructs a valid patch Id from the given hex string.

func PatchesByProject

func PatchesByProject(projectId string, ts time.Time, limit int) db.Q

PatchesByProject builds a query for patches that match the given project's id.

func Remove

func Remove(query db.Q) error

Remove removes all patch documents that satisfy the query.

func TryMarkFinished

func TryMarkFinished(versionId string, finishTime time.Time, status string) error

TryMarkFinished attempts to mark a patch of a given version as finished.

func TryMarkStarted

func TryMarkStarted(versionId string, startTime time.Time) error

TryMarkStarted attempts to mark a patch as started if it isn't already marked as such

func UpdateAll

func UpdateAll(query interface{}, update interface{}) (info *adb.ChangeInfo, err error)

UpdateAll runs an update on all patch documents.

func UpdateOne

func UpdateOne(query interface{}, update interface{}) error

UpdateOne runs an update on a single patch document.

Types

type DisplayTask

type DisplayTask struct {
	Name      string
	ExecTasks []string
}

type GithubPatch

type GithubPatch struct {
	PRNumber       int    `bson:"pr_number"`
	BaseOwner      string `bson:"base_owner"`
	BaseRepo       string `bson:"base_repo"`
	BaseBranch     string `bson:"base_branch"`
	HeadOwner      string `bson:"head_owner"`
	HeadRepo       string `bson:"head_repo"`
	HeadHash       string `bson:"head_hash"`
	Author         string `bson:"author"`
	AuthorUID      int    `bson:"author_uid"`
	MergeCommitSHA string `bson:"merge_commit_sha"`
}

GithubPatch stores patch data for patches create from GitHub pull requests

type Intent

type Intent interface {
	// ID returns a unique identifier for the patch. Should
	// correspond to the _id for the patch in database.
	ID() string

	// Insert inserts a patch intent in the database.
	Insert() error

	// SetProcessed should be called by an amboy queue after creating a patch from an intent.
	SetProcessed() error

	// IsProcessed returns whether a patch exists for this intent.
	IsProcessed() bool

	// GetType returns the patch intent, e.g., GithubIntentType.
	GetType() string

	// NewPatch creates a patch from the intent
	NewPatch() *Patch

	// Finalize indicates whether or not the patch created from this
	// intent should be finalized
	ShouldFinalizePatch() bool

	// GetAlias defines the variants and tasks this intent should run on.
	GetAlias() string

	// RequesterIdentity supplies a valid requester type, that is recorded
	// in patches, versions, builds, and tasks to denote the origin of the
	// patch
	RequesterIdentity() string
}

Intent represents an intent to create a patch build and is processed by an amboy queue.

func FindIntent

func FindIntent(id, intentType string) (Intent, error)

FindIntent returns an intent of the specified type from the database

func GetIntent

func GetIntent(intentType string) (Intent, bool)

GetIntent returns a concrete Intent object of the type specified by intentType.

func NewCliIntent

func NewCliIntent(user, project, baseHash, module, patchContent, description string, finalize bool, variants, tasks []string, alias string) (Intent, error)

func NewGithubIntent

func NewGithubIntent(msgDeliveryID string, pr *github.PullRequest) (Intent, error)

NewGithubIntent creates an Intent from a google/go-github PullRequestEvent, or returns an error if the some part of the struct is invalid

type ModulePatch

type ModulePatch struct {
	ModuleName string   `bson:"name"`
	Githash    string   `bson:"githash"`
	PatchSet   PatchSet `bson:"patch_set"`
	Message    string   `bson:"message"`
}

ModulePatch stores request details for a patch

type Patch

type Patch struct {
	Id              mgobson.ObjectId `bson:"_id,omitempty"`
	Description     string           `bson:"desc"`
	Project         string           `bson:"branch"`
	Githash         string           `bson:"githash"`
	PatchNumber     int              `bson:"patch_number"`
	Author          string           `bson:"author"`
	Version         string           `bson:"version"`
	Status          string           `bson:"status"`
	CreateTime      time.Time        `bson:"create_time"`
	StartTime       time.Time        `bson:"start_time"`
	FinishTime      time.Time        `bson:"finish_time"`
	BuildVariants   []string         `bson:"build_variants"`
	Tasks           []string         `bson:"tasks"`
	VariantsTasks   []VariantTasks   `bson:"variants_tasks"`
	Patches         []ModulePatch    `bson:"patches"`
	Activated       bool             `bson:"activated"`
	PatchedConfig   string           `bson:"patched_config"`
	Alias           string           `bson:"alias"`
	GithubPatchData GithubPatch      `bson:"github_patch_data,omitempty"`
}

Patch stores all details related to a patch request

func Find

func Find(query db.Q) ([]Patch, error)

Find runs a patch query, returning all patches that satisfy the query.

func FindFailedCommitQueuePatchesinTimeRange

func FindFailedCommitQueuePatchesinTimeRange(projectID string, startTime, endTime time.Time) ([]Patch, error)

FindFailedCommitQueuePatchesInTimeRange returns failed patches if they started within range, or if they were never started but finished within time range. (i.e. timed out)

func FindOne

func FindOne(query db.Q) (*Patch, error)

FindOne runs a patch query, returning one patch.

func MakeMergePatch

func MakeMergePatch(pr *github.PullRequest, projectID, alias string) (*Patch, error)

func (*Patch) AddBuildVariants

func (p *Patch) AddBuildVariants(bvs []string) error

AddBuildVariants adds more buildvarints to a patch document. This is meant to be used after initial patch creation.

func (*Patch) AddTasks

func (p *Patch) AddTasks(tasks []string) error

AddTasks adds more tasks to a patch document. This is meant to be used after initial patch creation, to reconfigure the patch.

func (*Patch) ClearPatchData

func (p *Patch) ClearPatchData()

ClearPatchData removes any inline patch data stored in this patch object for patches that have an associated id in gridfs, so that it can be stored properly.

func (*Patch) ConfigChanged

func (p *Patch) ConfigChanged(remotePath string) bool

ConfigChanged looks through the parts of the patch and returns true if the passed in remotePath is in the the name of the changed files that are part of the patch

func (*Patch) FetchPatchFiles

func (p *Patch) FetchPatchFiles() error

FetchPatchFiles dereferences externally-stored patch diffs by fetching them from gridfs and placing their contents into the patch object.

func (*Patch) FindModule

func (p *Patch) FindModule(moduleName string) *ModulePatch

func (*Patch) Insert

func (p *Patch) Insert() error

Insert inserts the patch into the db, returning any errors that occur

func (*Patch) IsGithubPRPatch

func (p *Patch) IsGithubPRPatch() bool

func (*Patch) IsPRMergePatch

func (p *Patch) IsPRMergePatch() bool

func (*Patch) MarshalBSON

func (p *Patch) MarshalBSON() ([]byte, error)

func (*Patch) RemoveModulePatch

func (p *Patch) RemoveModulePatch(moduleName string) error

RemoveModulePatch removes a module that's part of a patch request

func (*Patch) SetActivated

func (p *Patch) SetActivated(versionId string) error

SetActivated sets the patch to activated in the db

func (*Patch) SetActivation

func (p *Patch) SetActivation(activated bool) error

SetActivation sets the patch to the desired activation state without modifying the activation status of the possibly corresponding version.

func (*Patch) SetDescription

func (p *Patch) SetDescription(desc string) error

SetDescription sets a patch's description in the database

func (*Patch) SetVariantsTasks

func (p *Patch) SetVariantsTasks(variantsTasks []VariantTasks) error

SetVariantsTasks updates the variant/tasks pairs in the database. Also updates the Tasks and Variants fields to maintain backwards compatibility between the old and new fields.

func (*Patch) SyncVariantsTasks

func (p *Patch) SyncVariantsTasks(variantsTasks []VariantTasks)

SyncVariantsTasks updates the patch's Tasks and BuildVariants fields to match with the set in the given list of VariantTasks. This is to ensure schema backwards compatibility for T shaped patches. This mutates the patch in memory but does not update it in the database; for that, use SetVariantsTasks.

func (*Patch) UnmarshalBSON

func (p *Patch) UnmarshalBSON(in []byte) error

func (*Patch) UpdateGithashProjectAndTasks

func (p *Patch) UpdateGithashProjectAndTasks() error

func (*Patch) UpdateModulePatch

func (p *Patch) UpdateModulePatch(modulePatch ModulePatch) error

UpdateModulePatch adds or updates a module within a patch.

type PatchSet

type PatchSet struct {
	Patch       string    `bson:"patch,omitempty"`
	PatchFileId string    `bson:"patch_file_id,omitempty"`
	Summary     []Summary `bson:"summary"`
}

PatchSet stores information about the actual patch

type Summary

type Summary struct {
	Name      string `bson:"filename"`
	Additions int    `bson:"additions"`
	Deletions int    `bson:"deletions"`
}

Summary stores summary patch information

type VariantTasks

type VariantTasks struct {
	Variant      string
	Tasks        []string
	DisplayTasks []DisplayTask
}

VariantTasks contains the variant ID and the set of tasks to be scheduled for that variant

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL