1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
package link
import (
"context"
"fmt"
"strings"
"github.com/Azure/azure-sdk-for-go/eng/tools/generator/cmd/issue/query"
)
// Resolver represent a readme path resolver which resolves a link and produces a readme path
type Resolver interface {
GetReleaseLink() string
GetRequestLink() string
Resolve() (ResolveResult, error)
}
// CommitHashLink ...
type CommitHashLink interface {
GetCommitHash() (string, error)
}
func getCommitRefFromLink(l, prefix string) (string, error) {
if !strings.HasPrefix(l, prefix) {
return "", fmt.Errorf("link '%s' does not have prefix '%s'", l, prefix)
}
l = strings.TrimPrefix(l, prefix)
segments := strings.Split(l, "/")
return segments[0], nil
}
// ResolveResult ...
type ResolveResult interface {
GetReadme() Readme
GetCode() Code
}
type Code string
const (
// CodeSuccess marks the resolve is successful
CodeSuccess Code = "Success"
// CodeDataPlane marks the resolved readme belongs to a data plane package
CodeDataPlane Code = "DataPlaneRequest"
// CodePRNotMerged marks the resolve succeeds but the requested PR is not merged yet
CodePRNotMerged Code = "PRNotMerged"
)
type result struct {
readme Readme
code Code
}
// GetReadme ...
func (r result) GetReadme() Readme {
return r.readme
}
// GetCode ...
func (r result) GetCode() Code {
return r.code
}
type linkBase struct {
ctx context.Context
client *query.Client
releaseLink string
requestLink string
}
// GetReleaseLink ...
func (l linkBase) GetReleaseLink() string {
return l.releaseLink
}
// GetRequestLink ...
func (l linkBase) GetRequestLink() string {
return l.requestLink
}
func getResult(readme Readme) ResolveResult {
code := CodeDataPlane
if readme.IsMgmt() {
code = CodeSuccess
}
return result{
readme: readme,
code: code,
}
}
|