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  }