#8 Checkout, auth. #16
@@ -3,6 +3,7 @@ branches:
 | 
				
			|||||||
source:
 | 
					source:
 | 
				
			||||||
  type: gitea
 | 
					  type: gitea
 | 
				
			||||||
  apiurl: git.unistack.org
 | 
					  apiurl: git.unistack.org
 | 
				
			||||||
 | 
					  repository: pkgdash
 | 
				
			||||||
update_opt:
 | 
					update_opt:
 | 
				
			||||||
  pre: false
 | 
					  pre: false
 | 
				
			||||||
  major: false
 | 
					  major: false
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -105,13 +105,18 @@ func (g *Gitea) RequestOpen(ctx context.Context, branch string, path string, mod
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	//извлекаем ссылки с объектами из удаленного объекта??
 | 
						//извлекаем ссылки с объектами из удаленного объекта??
 | 
				
			||||||
	if err = repo.FetchContext(ctx, &git.FetchOptions{
 | 
						if err = repo.FetchContext(ctx, &git.FetchOptions{
 | 
				
			||||||
		//	Auth:  &httpauth.BasicAuth{Username: g.Username, Password: g.Password},
 | 
							Auth:  &httpauth.BasicAuth{Username: g.Username, Password: g.Password},
 | 
				
			||||||
		Force: true,
 | 
							Force: true,
 | 
				
			||||||
	}); err != nil && err != git.NoErrAlreadyUpToDate {
 | 
						}); err != nil && err != git.NoErrAlreadyUpToDate {
 | 
				
			||||||
		logger.Fatal(ctx, fmt.Sprintf("failed to fetch repo : %v", err))
 | 
							logger.Fatal(ctx, fmt.Sprintf("failed to fetch repo : %v", err))
 | 
				
			||||||
	} //обновляем репозиторий
 | 
						} //обновляем репозиторий
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var headRef *plumbing.Reference // вроде ссылка на гит
 | 
						var headRef, baseRef *plumbing.Reference // вроде ссылка на гит
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						baseRef, err = repo.Head()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							logger.Fatal(ctx, fmt.Sprintf("Error head: %s", err))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	refIter, err := repo.Branches() //получение веток
 | 
						refIter, err := repo.Branches() //получение веток
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Fatal(ctx, fmt.Sprintf("failed to get branches: %v", err))
 | 
							logger.Fatal(ctx, fmt.Sprintf("failed to get branches: %v", err))
 | 
				
			||||||
@@ -140,12 +145,14 @@ func (g *Gitea) RequestOpen(ctx context.Context, branch string, path string, mod
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Fatal(ctx, fmt.Sprintf("failed to get worktree: %v", err))
 | 
							logger.Fatal(ctx, fmt.Sprintf("failed to get worktree: %v", err))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	defer checkout(wtree, *headRef)
 | 
						defer checkout(wtree, *baseRef)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	g.pulls, err = GetPulls(ctx, g.URL, g.Owner, g.Repository, g.Password)
 | 
						if len(g.pulls) == 0 {
 | 
				
			||||||
	if err != nil && err != ErrPRNotExist {
 | 
							g.pulls, err = GetPulls(ctx, g.URL, g.Owner, g.Repository, g.Password)
 | 
				
			||||||
		logger.Error(ctx, fmt.Sprintf("GetPulls error: %s", err))
 | 
							if err != nil && err != ErrPRNotExist {
 | 
				
			||||||
		return err
 | 
								logger.Error(ctx, fmt.Sprintf("GetPulls error: %s", err))
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, pull := range g.pulls {
 | 
						for _, pull := range g.pulls {
 | 
				
			||||||
@@ -270,7 +277,7 @@ func (g *Gitea) RequestOpen(ctx context.Context, branch string, path string, mod
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	req.Header.Add("Accept", "application/json")
 | 
						req.Header.Add("Accept", "application/json")
 | 
				
			||||||
	req.Header.Add("Content-Type", "application/json")
 | 
						req.Header.Add("Content-Type", "application/json")
 | 
				
			||||||
	req.Header.Add("Authorization", g.Password)
 | 
						req.Header.Add("Authorization", "Bearer "+g.Password)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rsp, err := http.DefaultClient.Do(req)
 | 
						rsp, err := http.DefaultClient.Do(req)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -293,16 +300,19 @@ func (g *Gitea) RequestOpen(ctx context.Context, branch string, path string, mod
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (g *Gitea) RequestClose(ctx context.Context, branch string, path string) error {
 | 
					func (g *Gitea) RequestClose(ctx context.Context, branch string, path string) error {
 | 
				
			||||||
	logger.Debug(ctx, fmt.Sprintf("RequestClose start, mod title: %s", path))
 | 
						logger.Debug(ctx, fmt.Sprintf("RequestClose start, mod title: %s", path))
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pulls, err := GetPulls(ctx, g.URL, g.Owner, g.Repository, g.Password)
 | 
						if len(g.pulls) == 0 {
 | 
				
			||||||
	if err != nil {
 | 
							g.pulls, err = GetPulls(ctx, g.URL, g.Owner, g.Repository, g.Password)
 | 
				
			||||||
		logger.Error(ctx, fmt.Sprintf("GetPulls error: %s", err))
 | 
							if err != nil && err != ErrPRNotExist {
 | 
				
			||||||
		return err
 | 
								logger.Error(ctx, fmt.Sprintf("GetPulls error: %s", err))
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	prExist := false
 | 
						prExist := false
 | 
				
			||||||
	var b string // Name of the branch to be deleted
 | 
						var b string // Name of the branch to be deleted
 | 
				
			||||||
	for _, pull := range pulls {
 | 
						for _, pull := range g.pulls {
 | 
				
			||||||
		if strings.Contains(pull.Title, path) && pull.Base.Ref == branch {
 | 
							if strings.Contains(pull.Title, path) && pull.Base.Ref == branch {
 | 
				
			||||||
			logger.Info(ctx, fmt.Sprintf("PR for %s exists: %s", path, pull.URL))
 | 
								logger.Info(ctx, fmt.Sprintf("PR for %s exists: %s", path, pull.URL))
 | 
				
			||||||
			prExist = true
 | 
								prExist = true
 | 
				
			||||||
@@ -377,9 +387,12 @@ func (g *Gitea) RequestList(ctx context.Context, branch string) (map[string]stri
 | 
				
			|||||||
	logger.Debug(ctx, fmt.Sprintf("RequestList for %s", branch))
 | 
						logger.Debug(ctx, fmt.Sprintf("RequestList for %s", branch))
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	g.pulls, err = GetPulls(ctx, g.URL, g.Owner, g.Repository, g.Password)
 | 
						if len(g.pulls) == 0 {
 | 
				
			||||||
	if err != nil {
 | 
							g.pulls, err = GetPulls(ctx, g.URL, g.Owner, g.Repository, g.Password)
 | 
				
			||||||
		return nil, err
 | 
							if err != nil && err != ErrPRNotExist {
 | 
				
			||||||
 | 
								logger.Error(ctx, fmt.Sprintf("GetPulls error: %s", err))
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var path string
 | 
						var path string
 | 
				
			||||||
@@ -411,7 +424,7 @@ func DeleteBranch(ctx context.Context, url, owner, repo, branch, password string
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	req.Header.Add("Accept", "application/json")
 | 
						req.Header.Add("Accept", "application/json")
 | 
				
			||||||
	req.Header.Add("Content-Type", "application/json")
 | 
						req.Header.Add("Content-Type", "application/json")
 | 
				
			||||||
	req.Header.Add("Authorization", password)
 | 
						req.Header.Add("Authorization", "Bearer "+password)
 | 
				
			||||||
	return req, err
 | 
						return req, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -432,7 +445,7 @@ func GetPulls(ctx context.Context, url, owner, repo, password string) ([]*giteaP
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		req.Header.Add("Accept", "application/json")
 | 
							req.Header.Add("Accept", "application/json")
 | 
				
			||||||
		req.Header.Add("Content-Type", "application/json")
 | 
							req.Header.Add("Content-Type", "application/json")
 | 
				
			||||||
		req.Header.Add("Authorization", password)
 | 
							req.Header.Add("Authorization", "Bearer "+password)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		rsp, err := http.DefaultClient.Do(req) // выполнение запроса
 | 
							rsp, err := http.DefaultClient.Do(req) // выполнение запроса
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@@ -466,7 +479,9 @@ func GetPulls(ctx context.Context, url, owner, repo, password string) ([]*giteaP
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func checkout(w *git.Worktree, ref plumbing.Reference) {
 | 
					func checkout(w *git.Worktree, ref plumbing.Reference) {
 | 
				
			||||||
	ctx := context.Background()
 | 
						ctx := context.Background()
 | 
				
			||||||
	if err := w.Reset(&git.ResetOptions{Commit: ref.Hash(), Mode: git.HardReset}); err != nil {
 | 
						logger.Debug(ctx, fmt.Sprintf("Checkout: %s", ref.Name().Short()))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := w.Checkout(&git.CheckoutOptions{Hash: ref.Hash()}); err != nil {
 | 
				
			||||||
		logger.Fatal(ctx, fmt.Sprintf("failed to reset: %v", err))
 | 
							logger.Fatal(ctx, fmt.Sprintf("failed to reset: %v", err))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -140,10 +140,12 @@ func (g *Github) RequestOpen(ctx context.Context, branch string, path string, mo
 | 
				
			|||||||
		logger.Fatal(ctx, fmt.Sprintf("failed to get worktree: %v", err))
 | 
							logger.Fatal(ctx, fmt.Sprintf("failed to get worktree: %v", err))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	g.pulls, err = GetPulls(ctx, g.URL, g.Owner, g.Repository, g.Password)
 | 
						if len(g.pulls) == 0 {
 | 
				
			||||||
	if err != nil && err != ErrPRNotExist {
 | 
							g.pulls, err = GetPulls(ctx, g.URL, g.Owner, g.Repository, g.Password)
 | 
				
			||||||
		logger.Error(ctx, fmt.Sprintf("GetPulls error: %s", err))
 | 
							if err != nil && err != ErrPRNotExist {
 | 
				
			||||||
		return err
 | 
								logger.Error(ctx, fmt.Sprintf("GetPulls error: %s", err))
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, pull := range g.pulls {
 | 
						for _, pull := range g.pulls {
 | 
				
			||||||
@@ -268,7 +270,7 @@ func (g *Github) RequestOpen(ctx context.Context, branch string, path string, mo
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	req.Header.Add("Accept", "application/json")
 | 
						req.Header.Add("Accept", "application/json")
 | 
				
			||||||
	req.Header.Add("Content-Type", "application/json")
 | 
						req.Header.Add("Content-Type", "application/json")
 | 
				
			||||||
	req.Header.Add("Authorization", g.Password)
 | 
						req.Header.Add("Authorization", "Bearer "+g.Password)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rsp, err := http.DefaultClient.Do(req)
 | 
						rsp, err := http.DefaultClient.Do(req)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -295,7 +297,28 @@ func (g *Github) RequestUpdate(ctx context.Context, branch string, path string,
 | 
				
			|||||||
	return fmt.Errorf("implement me")
 | 
						return fmt.Errorf("implement me")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
func (g *Github) RequestList(ctx context.Context, branch string) (map[string]string, error) {
 | 
					func (g *Github) RequestList(ctx context.Context, branch string) (map[string]string, error) {
 | 
				
			||||||
	return nil, fmt.Errorf("implement me")
 | 
						logger.Debug(ctx, fmt.Sprintf("RequestList for %s", branch))
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(g.pulls) == 0 {
 | 
				
			||||||
 | 
							g.pulls, err = GetPulls(ctx, g.URL, g.Owner, g.Repository, g.Password)
 | 
				
			||||||
 | 
							if err != nil && err != ErrPRNotExist {
 | 
				
			||||||
 | 
								logger.Error(ctx, fmt.Sprintf("GetPulls error: %s", err))
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var path string
 | 
				
			||||||
 | 
						rMap := make(map[string]string)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, pull := range g.pulls {
 | 
				
			||||||
 | 
							if !strings.HasPrefix(pull.Title, "Bump ") || pull.Base.Ref != branch { //добавляем только реквесты бота по обновлению модулей
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							path = strings.Split(pull.Title, " ")[1] //todo Работет только для дефолтного шаблона
 | 
				
			||||||
 | 
							rMap[path] = pull.Title
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return rMap, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetPulls(ctx context.Context, url, owner, repo, password string) ([]*githubPull, error) {
 | 
					func GetPulls(ctx context.Context, url, owner, repo, password string) ([]*githubPull, error) {
 | 
				
			||||||
@@ -315,7 +338,7 @@ func GetPulls(ctx context.Context, url, owner, repo, password string) ([]*github
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		req.Header.Add("Accept", "application/json")
 | 
							req.Header.Add("Accept", "application/json")
 | 
				
			||||||
		req.Header.Add("Content-Type", "application/json")
 | 
							req.Header.Add("Content-Type", "application/json")
 | 
				
			||||||
		req.Header.Add("Authorization", password)
 | 
							req.Header.Add("Authorization", "Bearer "+password)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		rsp, err := http.DefaultClient.Do(req) // выполнение запроса
 | 
							rsp, err := http.DefaultClient.Do(req) // выполнение запроса
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,6 @@ import (
 | 
				
			|||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"os/exec"
 | 
						"os/exec"
 | 
				
			||||||
	"regexp"
 | 
						"regexp"
 | 
				
			||||||
	"strconv"
 | 
					 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"text/template"
 | 
						"text/template"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
@@ -59,11 +58,6 @@ type gitlabPull struct {
 | 
				
			|||||||
	ID     int64  `json:"id"`
 | 
						ID     int64  `json:"id"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type gitlabProject struct {
 | 
					 | 
				
			||||||
	Id   int64  `json:"id"`
 | 
					 | 
				
			||||||
	Name string `json:"name"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (g *Gitlab) Name() string {
 | 
					func (g *Gitlab) Name() string {
 | 
				
			||||||
	return "gitlab"
 | 
						return "gitlab"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -114,12 +108,16 @@ func (g *Gitlab) RequestOpen(ctx context.Context, branch string, path string, mo
 | 
				
			|||||||
		logger.Fatal(ctx, fmt.Sprintf("failed to fetch repo : %v", err))
 | 
							logger.Fatal(ctx, fmt.Sprintf("failed to fetch repo : %v", err))
 | 
				
			||||||
	} //обновляем репозиторий
 | 
						} //обновляем репозиторий
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var headRef *plumbing.Reference // вроде ссылка на гит
 | 
						var headRef, baseRef *plumbing.Reference // вроде ссылка на гит
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						baseRef, err = repo.Head()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							logger.Error(ctx, fmt.Sprintf("Error head: %s", err))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	refIter, err := repo.Branches() //получение веток
 | 
						refIter, err := repo.Branches() //получение веток
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Fatal(ctx, fmt.Sprintf("failed to get branches: %v", err))
 | 
							logger.Fatal(ctx, fmt.Sprintf("failed to get branches: %v", err))
 | 
				
			||||||
		return err
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
		ref, err := refIter.Next()
 | 
							ref, err := refIter.Next()
 | 
				
			||||||
@@ -144,17 +142,14 @@ func (g *Gitlab) RequestOpen(ctx context.Context, branch string, path string, mo
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Fatal(ctx, fmt.Sprintf("failed to get worktree: %v", err))
 | 
							logger.Fatal(ctx, fmt.Sprintf("failed to get worktree: %v", err))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	defer checkout(wtree, *headRef)
 | 
						defer checkout(wtree, *baseRef)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	g.RepositoryId, err = GetRepoID(ctx, g.URL, g.Owner, g.Repository, g.Password)
 | 
						if len(g.pulls) == 0 {
 | 
				
			||||||
	if err != nil || g.RepositoryId == "" {
 | 
							g.pulls, err = GetPulls(ctx, g.URL, g.RepositoryId, branch, g.Password)
 | 
				
			||||||
		return fmt.Errorf("project id is empty")
 | 
							if err != nil && err != ErrPRNotExist {
 | 
				
			||||||
	}
 | 
								logger.Error(ctx, fmt.Sprintf("GetPulls error: %s", err))
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
	g.pulls, err = GetPulls(ctx, g.URL, g.RepositoryId, branch, g.Password)
 | 
							}
 | 
				
			||||||
	if err != nil && err != ErrPRNotExist {
 | 
					 | 
				
			||||||
		logger.Error(ctx, fmt.Sprintf("GetPulls error: %s", err))
 | 
					 | 
				
			||||||
		return err
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, pull := range g.pulls {
 | 
						for _, pull := range g.pulls {
 | 
				
			||||||
@@ -282,7 +277,7 @@ func (g *Gitlab) RequestOpen(ctx context.Context, branch string, path string, mo
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	req.Header.Add("Accept", "application/json")
 | 
						req.Header.Add("Accept", "application/json")
 | 
				
			||||||
	req.Header.Add("Content-Type", "application/json")
 | 
						req.Header.Add("Content-Type", "application/json")
 | 
				
			||||||
	req.Header.Add("Authorization", g.Password)
 | 
						req.Header.Add("Authorization", "Bearer "+g.Password)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rsp, err := http.DefaultClient.Do(req)
 | 
						rsp, err := http.DefaultClient.Do(req)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -300,23 +295,19 @@ func (g *Gitlab) RequestOpen(ctx context.Context, branch string, path string, mo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (g *Gitlab) RequestClose(ctx context.Context, branch string, path string) error {
 | 
					func (g *Gitlab) RequestClose(ctx context.Context, branch string, path string) error {
 | 
				
			||||||
	logger.Debug(ctx, fmt.Sprintf("RequestClose start, mod title: %s", path))
 | 
						logger.Debug(ctx, fmt.Sprintf("RequestClose start, mod title: %s", path))
 | 
				
			||||||
 | 
					 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	g.RepositoryId, err = GetRepoID(ctx, g.URL, g.Owner, g.Repository, g.Password)
 | 
						if len(g.pulls) == 0 {
 | 
				
			||||||
	if err != nil || g.RepositoryId == "" {
 | 
							g.pulls, err = GetPulls(ctx, g.URL, g.RepositoryId, branch, g.Password)
 | 
				
			||||||
		return fmt.Errorf("project id is empty")
 | 
							if err != nil && err != ErrPRNotExist {
 | 
				
			||||||
	}
 | 
								logger.Error(ctx, fmt.Sprintf("GetPulls error: %s", err))
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
	pulls, err := GetPulls(ctx, g.URL, g.RepositoryId, branch, g.Password)
 | 
							}
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		logger.Error(ctx, fmt.Sprintf("GetPulls error: %s", err))
 | 
					 | 
				
			||||||
		return err
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	prExist := false
 | 
						prExist := false
 | 
				
			||||||
	var b string // Name of the branch to be deleted
 | 
						var b string // Name of the branch to be deleted
 | 
				
			||||||
	for _, pull := range pulls {
 | 
						for _, pull := range g.pulls {
 | 
				
			||||||
		if strings.Contains(pull.Title, path) {
 | 
							if strings.Contains(pull.Title, path) {
 | 
				
			||||||
			logger.Info(ctx, fmt.Sprintf("PR for %s exists: %s", path, pull.URL))
 | 
								logger.Info(ctx, fmt.Sprintf("PR for %s exists: %s", path, pull.URL))
 | 
				
			||||||
			prExist = true
 | 
								prExist = true
 | 
				
			||||||
@@ -347,11 +338,6 @@ func (g *Gitlab) RequestUpdate(ctx context.Context, branch string, path string,
 | 
				
			|||||||
	logger.Debug(ctx, fmt.Sprintf("RequestUpdate start, mod title: %s", path))
 | 
						logger.Debug(ctx, fmt.Sprintf("RequestUpdate start, mod title: %s", path))
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	g.RepositoryId, err = GetRepoID(ctx, g.URL, g.Owner, g.Repository, g.Password)
 | 
					 | 
				
			||||||
	if err != nil || g.RepositoryId == "" {
 | 
					 | 
				
			||||||
		return fmt.Errorf("project id is empty")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if len(g.pulls) == 0 {
 | 
						if len(g.pulls) == 0 {
 | 
				
			||||||
		g.pulls, err = GetPulls(ctx, g.URL, g.RepositoryId, branch, g.Password)
 | 
							g.pulls, err = GetPulls(ctx, g.URL, g.RepositoryId, branch, g.Password)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@@ -396,14 +382,12 @@ func (g *Gitlab) RequestList(ctx context.Context, branch string) (map[string]str
 | 
				
			|||||||
	logger.Debug(ctx, fmt.Sprintf("RequestList for %s", branch))
 | 
						logger.Debug(ctx, fmt.Sprintf("RequestList for %s", branch))
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	g.RepositoryId, err = GetRepoID(ctx, g.URL, g.Owner, g.Repository, g.Password)
 | 
						if len(g.pulls) == 0 {
 | 
				
			||||||
	if err != nil || g.RepositoryId == "" {
 | 
							g.pulls, err = GetPulls(ctx, g.URL, g.RepositoryId, branch, g.Password)
 | 
				
			||||||
		return nil, fmt.Errorf("project id is empty")
 | 
							if err != nil && err != ErrPRNotExist {
 | 
				
			||||||
	}
 | 
								logger.Error(ctx, fmt.Sprintf("GetPulls error: %s", err))
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
	g.pulls, err = GetPulls(ctx, g.URL, g.RepositoryId, branch, g.Password)
 | 
							}
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var path string
 | 
						var path string
 | 
				
			||||||
@@ -435,7 +419,7 @@ func DeleteBranch(ctx context.Context, url, projectId, branch, password string)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	req.Header.Add("Accept", "application/json")
 | 
						req.Header.Add("Accept", "application/json")
 | 
				
			||||||
	req.Header.Add("Content-Type", "application/json")
 | 
						req.Header.Add("Content-Type", "application/json")
 | 
				
			||||||
	req.Header.Add("Authorization", password)
 | 
						req.Header.Add("Authorization", "Bearer "+password)
 | 
				
			||||||
	return req, err
 | 
						return req, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -452,7 +436,7 @@ func GetPulls(ctx context.Context, url, projectId, branch, password string) ([]*
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	req.Header.Add("Accept", "application/json")
 | 
						req.Header.Add("Accept", "application/json")
 | 
				
			||||||
	req.Header.Add("Content-Type", "application/json")
 | 
						req.Header.Add("Content-Type", "application/json")
 | 
				
			||||||
	req.Header.Add("Authorization", password)
 | 
						req.Header.Add("Authorization", "Bearer "+password)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rsp, err := http.DefaultClient.Do(req) // выполнение запроса
 | 
						rsp, err := http.DefaultClient.Do(req) // выполнение запроса
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -476,43 +460,11 @@ func GetPulls(ctx context.Context, url, projectId, branch, password string) ([]*
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetRepoID(ctx context.Context, url, owner, repo, password string) (rId string, err error) {
 | 
					 | 
				
			||||||
	var buf []byte
 | 
					 | 
				
			||||||
	projects := make([]*gitlabProject, 0, 10)
 | 
					 | 
				
			||||||
	req, err := http.NewRequestWithContext(ctx, http.MethodGet, fmt.Sprintf("https://%s/api/v4/users/%s/projects?owned=true", url, owner), nil)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	req.Header.Add("Accept", "application/json")
 | 
					 | 
				
			||||||
	req.Header.Add("Content-Type", "application/json")
 | 
					 | 
				
			||||||
	req.Header.Add("Authorization", password)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	rsp, err := http.DefaultClient.Do(req)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	buf, _ = io.ReadAll(rsp.Body)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	switch rsp.StatusCode {
 | 
					 | 
				
			||||||
	case http.StatusOK:
 | 
					 | 
				
			||||||
		if err = json.Unmarshal(buf, &projects); err != nil {
 | 
					 | 
				
			||||||
			logger.Error(ctx, fmt.Sprintf("failed to decode response %s err: %v", buf, err))
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		for _, p := range projects {
 | 
					 | 
				
			||||||
			if p.Name == repo {
 | 
					 | 
				
			||||||
				rId = strconv.Itoa(int(p.Id))
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		return rId, fmt.Errorf("unknown error: %s", buf)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func checkout(w *git.Worktree, ref plumbing.Reference) {
 | 
					func checkout(w *git.Worktree, ref plumbing.Reference) {
 | 
				
			||||||
	ctx := context.Background()
 | 
						ctx := context.Background()
 | 
				
			||||||
	if err := w.Reset(&git.ResetOptions{Commit: ref.Hash(), Mode: git.HardReset}); err != nil {
 | 
						logger.Debug(ctx, fmt.Sprintf("Checkout: %s", ref.Name().Short()))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := w.Checkout(&git.CheckoutOptions{Hash: ref.Hash()}); err != nil {
 | 
				
			||||||
		logger.Fatal(ctx, fmt.Sprintf("failed to reset: %v", err))
 | 
							logger.Fatal(ctx, fmt.Sprintf("failed to reset: %v", err))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user