blob: dd782a6020d519fd31c0100819b7f0b02930b12f [file] [log] [blame]
// Copyright 2020 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// zoekt-hg-index provides bare-bones Mercurial indexing
package main
import (
"flag"
"fmt"
"log"
"path/filepath"
"github.com/google/zoekt"
"github.com/google/zoekt/build"
"github.com/google/zoekt/cmd"
"go.uber.org/automaxprocs/maxprocs"
"humungus.tedunangst.com/r/gerc"
)
func main() {
revisionStr := flag.String("revision", "", "hg revision to index")
flag.Parse()
maxprocs.Set()
opts := cmd.OptionsFromFlags()
if len(flag.Args()) < 1 {
log.Fatal("hg repo directory argument missing")
}
dir, err := filepath.Abs(flag.Arg(0))
if err != nil {
log.Fatal(err)
}
opts.RepositoryDescription.Name = dir
if err := indexHg(dir, *revisionStr, opts); err != nil {
log.Fatal(err)
}
}
func indexHg(dir, rev string, opts *build.Options) error {
r, err := gerc.Open(dir)
if err != nil {
log.Fatal(err)
}
defer r.Close()
builder, err := build.NewBuilder(*opts)
if err != nil {
return err
}
defer builder.Finish()
mfs, err := r.GetFiles(gerc.FilesArgs{
Revision: rev,
})
if err != nil {
return fmt.Errorf("GetFiles %v", err)
}
for _, mf := range mfs {
fd := gerc.FileDataArgs{
Filename: mf.Name,
Revision: rev,
}
content, err := r.GetFileData(fd)
if err != nil {
return fmt.Errorf("GetFileData %v", err)
}
if err := builder.Add(zoekt.Document{
Name: mf.Name,
Content: content,
}); err != nil {
return err
}
}
return builder.Finish()
}