github.com/jfrog/jfrog-cli-core@v1.12.1/artifactory/utils/search.go (about) 1 package utils 2 3 import ( 4 "encoding/json" 5 6 "github.com/jfrog/jfrog-cli-core/artifactory/spec" 7 "github.com/jfrog/jfrog-client-go/artifactory/services" 8 "github.com/jfrog/jfrog-client-go/artifactory/services/utils" 9 clientutils "github.com/jfrog/jfrog-client-go/utils" 10 "github.com/jfrog/jfrog-client-go/utils/errorutils" 11 "github.com/jfrog/jfrog-client-go/utils/io/content" 12 "github.com/jfrog/jfrog-client-go/utils/log" 13 ) 14 15 type SearchResult struct { 16 Path string `json:"path,omitempty"` 17 Type string `json:"type,omitempty"` 18 Size int64 `json:"size,omitempty"` 19 Created string `json:"created,omitempty"` 20 Modified string `json:"modified,omitempty"` 21 Sha1 string `json:"sha1,omitempty"` 22 Md5 string `json:"md5,omitempty"` 23 Props map[string][]string `json:"props,omitempty"` 24 } 25 26 func PrintSearchResults(reader *content.ContentReader) error { 27 length, err := reader.Length() 28 if length == 0 { 29 log.Output("[]") 30 return err 31 } 32 log.Output("[") 33 suffix := "," 34 for searchResult := new(SearchResult); reader.NextRecord(searchResult) == nil; searchResult = new(SearchResult) { 35 if length == 1 { 36 suffix = "" 37 } 38 printSearchResult(*searchResult, suffix) 39 length-- 40 } 41 log.Output("]") 42 reader.Reset() 43 return reader.GetError() 44 } 45 46 func printSearchResult(toPrint SearchResult, suffix string) error { 47 data, err := json.Marshal(toPrint) 48 if err != nil { 49 return errorutils.CheckError(err) 50 } 51 log.Output(" " + clientutils.IndentJsonArray(data) + suffix) 52 return nil 53 } 54 55 func AqlResultToSearchResult(readers []*content.ContentReader) (*content.ContentReader, error) { 56 writer, err := content.NewContentWriter("results", true, false) 57 if err != nil { 58 return nil, err 59 } 60 defer writer.Close() 61 for _, reader := range readers { 62 for searchResult := new(utils.ResultItem); reader.NextRecord(searchResult) == nil; searchResult = new(utils.ResultItem) { 63 if err != nil { 64 return nil, err 65 } 66 tempResult := new(SearchResult) 67 tempResult.Path = searchResult.Repo + "/" 68 if searchResult.Path != "." { 69 tempResult.Path += searchResult.Path + "/" 70 } 71 if searchResult.Name != "." { 72 tempResult.Path += searchResult.Name 73 } 74 tempResult.Type = searchResult.Type 75 tempResult.Size = searchResult.Size 76 tempResult.Created = searchResult.Created 77 tempResult.Modified = searchResult.Modified 78 tempResult.Sha1 = searchResult.Actual_Sha1 79 tempResult.Md5 = searchResult.Actual_Md5 80 tempResult.Props = make(map[string][]string, len(searchResult.Properties)) 81 for _, prop := range searchResult.Properties { 82 tempResult.Props[prop.Key] = append(tempResult.Props[prop.Key], prop.Value) 83 } 84 writer.Write(*tempResult) 85 } 86 if err := reader.GetError(); err != nil { 87 return nil, err 88 } 89 reader.Reset() 90 } 91 return content.NewContentReader(writer.GetFilePath(), content.DefaultKey), nil 92 } 93 94 func GetSearchParams(f *spec.File) (searchParams services.SearchParams, err error) { 95 searchParams = services.NewSearchParams() 96 searchParams.ArtifactoryCommonParams, err = f.ToArtifactoryCommonParams() 97 if err != nil { 98 return 99 } 100 searchParams.Recursive, err = f.IsRecursive(true) 101 if err != nil { 102 return 103 } 104 searchParams.ExcludeArtifacts, err = f.IsExcludeArtifacts(false) 105 if err != nil { 106 return 107 } 108 searchParams.IncludeDeps, err = f.IsIncludeDeps(false) 109 if err != nil { 110 return 111 } 112 searchParams.IncludeDirs, err = f.IsIncludeDirs(false) 113 if err != nil { 114 return 115 } 116 searchParams.Transitive, err = f.IsTransitive(false) 117 return 118 } 119 120 func SearchResultNoDate(reader *content.ContentReader) (*content.ContentReader, error) { 121 writer, err := content.NewContentWriter("results", true, false) 122 if err != nil { 123 return nil, err 124 } 125 defer writer.Close() 126 for resultItem := new(SearchResult); reader.NextRecord(resultItem) == nil; resultItem = new(SearchResult) { 127 if err != nil { 128 return nil, err 129 } 130 resultItem.Created = "" 131 resultItem.Modified = "" 132 delete(resultItem.Props, "vcs.url") 133 delete(resultItem.Props, "vcs.revision") 134 writer.Write(*resultItem) 135 } 136 if err := reader.GetError(); err != nil { 137 return nil, err 138 } 139 reader.Reset() 140 return content.NewContentReader(writer.GetFilePath(), writer.GetArrayKey()), nil 141 }