func()

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
}