func()

in tools/eksDistroBuildToolingOpsTools/pkg/externalplugin/backportRequest.go [23:66]


func (s *Server) handleBackportRequest(l *logrus.Entry, requestor string, comment *github.IssueComment, issue *github.Issue, project string, versions []string, org, repo string, num int) error {
	var lock *sync.Mutex
	func() {
		s.mapLock.Lock()
		defer s.mapLock.Unlock()
		if _, ok := s.lockBackportMap[backportRequest{project, org, repo, num}]; !ok {
			if s.lockBackportMap == nil {
				s.lockBackportMap = map[backportRequest]*sync.Mutex{}
			}
			s.lockBackportMap[backportRequest{project, org, repo, num}] = &sync.Mutex{}
		}
		lock = s.lockBackportMap[backportRequest{project, org, repo, num}]
	}()
	lock.Lock()
	defer lock.Unlock()

	//Only a org member should be able to request a issue backport
	if !s.AllowAll {
		ok, err := s.Ghc.IsMember(org, requestor)
		if err != nil {
			return err
		}
		if !ok {
			resp := fmt.Sprintf(constants.AllowAllFailRespTemplate, requestor, org, org)
			l.Info(resp)
			return s.Ghc.CreateComment(org, repo, num, resp)
		}
	}

	// Handle "/backport:<project> [versions] - ie /backport:golang 1.18.12 ...
	switch project {
	case "golang":
	case "go":
		if err := s.backportGolang(l, requestor, comment, issue, project, versions, org, repo, num); err != nil {
			return err
		}
	default:
		if err := s.createComment(l, org, repo, issue.Number, comment, fmt.Sprintf("%s not a valid project for /backport: command", project)); err != nil {
			return err
		}
	}

	return nil
}