MCPcopy Create free account
hub / github.com/bytebase/bytebase / createRevisions

Method createRevisions

backend/api/v1/revision_service.go:167–274  ·  view source on GitHub ↗
(
	ctx context.Context,
	parent string,
	revisions []*v1pb.Revision,
	database *store.DatabaseMessage,
)

Source from the content-addressed store, hash-verified

165}
166
167func (s *RevisionService) createRevisions(
168 ctx context.Context,
169 parent string,
170 revisions []*v1pb.Revision,
171 database *store.DatabaseMessage,
172) ([]*v1pb.Revision, error) {
173 var sheetSha256s []string
174 for _, revisionReq := range revisions {
175 if revisionReq == nil {
176 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("request.Revision is not set"))
177 }
178 // Validate the version format.
179 if _, err := model.NewVersion(revisionReq.Version); err != nil {
180 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Wrapf(err, "failed to parse version %q", revisionReq.Version))
181 }
182
183 _, sha, err := common.GetProjectResourceIDSheetSha256(revisionReq.Sheet)
184 if err != nil {
185 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Wrapf(err, "failed to get sheet from %v", revisionReq.Sheet))
186 }
187 sheetSha256s = append(sheetSha256s, sha)
188 }
189
190 exist, err := s.store.HasSheets(ctx, sheetSha256s...)
191 if err != nil {
192 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("failed to check sheets: %v", err))
193 }
194 if !exist {
195 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("some sheets are not found"))
196 }
197
198 var createdRevisions []*v1pb.Revision
199 for i, revision := range revisions {
200 if revision.TaskRun != "" {
201 projectID, planID, stageID, taskID, taskRunID, err := common.GetProjectIDPlanIDStageIDTaskIDTaskRunID(revision.TaskRun)
202 if err != nil {
203 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Errorf("failed to get taskRun from %q", revision.TaskRun))
204 }
205 taskRun, err := s.store.GetTaskRunV1(ctx, &store.FindTaskRunMessage{
206 Workspace: common.GetWorkspaceIDFromContext(ctx),
207 ProjectID: projectID,
208 UID: &taskRunID,
209 })
210 if err != nil {
211 return nil, connect.NewError(connect.CodeInternal, errors.Wrapf(err, "failed to get taskRun"))
212 }
213 if taskRun == nil {
214 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("taskRun %q not found", revision.TaskRun))
215 }
216 if taskRun.ProjectID != projectID ||
217 taskRun.PlanUID != planID ||
218 taskRun.Environment != formatEnvironmentFromStageID(stageID) ||
219 taskRun.TaskUID != taskID {
220 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("taskRun %q not found", revision.TaskRun))
221 }
222 }
223
224 if revision.Type == v1pb.Revision_TYPE_UNSPECIFIED {

Callers 1

BatchCreateRevisionsMethod · 0.95

Calls 14

NewVersionFunction · 0.92
GetProjectReleaseIDFileFunction · 0.92
FormatSheetFunction · 0.92
convertRevisionFunction · 0.85
convertToRevisionFunction · 0.85
ErrorfMethod · 0.80
HasSheetsMethod · 0.80
GetTaskRunV1Method · 0.80

Tested by

no test coverage detected