in controller/merge_request/controller.go [298:371]
func (c *Controller) addCachedFiles(ctx context.Context, instance *gerritService.GerritMergeRequest) error {
if instance.Status.Value != gerritService.StatusNew {
return nil
}
key := registry.CachedFilesIndex(instance.Spec.ProjectName)
files, ok := c.appCache.Get(key)
_, ok = files.([]registry.CachedFile)
if !ok {
c.appCache.Delete(key)
c.logger.Infow("wrong cached files type", "Request.Namespace", instance.Namespace,
"Request.Name", instance.Name)
return nil
}
_, _, projectPath, err := prepareControllerFolders(c.cnf.TempFolder, instance.Spec.ProjectName)
if err != nil {
return fmt.Errorf("unable to prepare controller tmp folders, %w", err)
}
gitService, err := c.initGitService(ctx, projectPath)
if err != nil {
return fmt.Errorf("unable to init git service, %w", err)
}
if err := gitService.Clone(fmt.Sprintf("%s/%s", codebase.GerritSSHURL(c.cnf), instance.Spec.ProjectName)); err != nil {
return fmt.Errorf("unable to clone repo, %w", err)
}
detail, err := c.gerrit.GetChangeDetails(instance.Status.ChangeID)
if err != nil {
return fmt.Errorf("unable to get change details, %w", err)
}
var (
ref string
commitMessage string
)
for _, v := range detail.Revisions {
ref = v.Ref
commitMessage = v.Commit.Message
}
if ref == "" {
return errors.New("empty ref")
}
if commitMessage == "" {
commitMessage = fmt.Sprintf("edit registry\n\nChange-Id: %s", instance.Status.ChangeID)
}
if err := gitService.RawPull("origin", ref); err != nil {
return fmt.Errorf("unable to pull refs, %w", err)
}
changed, err := codebase.SetCachedFiles(instance.Spec.ProjectName, c.appCache, gitService)
if err != nil {
return fmt.Errorf("unable to set cached files, %w", err)
}
if changed {
if err := gitService.RawCommit(&git.User{Name: instance.Spec.AuthorName, Email: instance.Spec.AuthorEmail},
commitMessage, "--amend"); err != nil {
return fmt.Errorf("unable to commit, %w", err)
}
if err := gitService.Push("origin", fmt.Sprintf("HEAD:refs/for/%s", instance.TargetBranch())); err != nil {
return fmt.Errorf("unable to push refs, %w", err)
}
}
return nil
}