1*9e965d6fSRomain Jobredeaux// Copyright 2018 The Bazel Authors. All rights reserved. 2*9e965d6fSRomain Jobredeaux// 3*9e965d6fSRomain Jobredeaux// Licensed under the Apache License, Version 2.0 (the "License"); 4*9e965d6fSRomain Jobredeaux// you may not use this file except in compliance with the License. 5*9e965d6fSRomain Jobredeaux// You may obtain a copy of the License at 6*9e965d6fSRomain Jobredeaux// 7*9e965d6fSRomain Jobredeaux// http://www.apache.org/licenses/LICENSE-2.0 8*9e965d6fSRomain Jobredeaux// 9*9e965d6fSRomain Jobredeaux// Unless required by applicable law or agreed to in writing, software 10*9e965d6fSRomain Jobredeaux// distributed under the License is distributed on an "AS IS" BASIS, 11*9e965d6fSRomain Jobredeaux// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*9e965d6fSRomain Jobredeaux// See the License for the specific language governing permissions and 13*9e965d6fSRomain Jobredeaux// limitations under the License. 14*9e965d6fSRomain Jobredeaux 15*9e965d6fSRomain Jobredeaux// jdeps is a command line tool to filter a jdeps proto 16*9e965d6fSRomain Jobredeauxpackage main 17*9e965d6fSRomain Jobredeaux 18*9e965d6fSRomain Jobredeauximport ( 19*9e965d6fSRomain Jobredeaux "flag" 20*9e965d6fSRomain Jobredeaux "io/ioutil" 21*9e965d6fSRomain Jobredeaux "log" 22*9e965d6fSRomain Jobredeaux "strings" 23*9e965d6fSRomain Jobredeaux 24*9e965d6fSRomain Jobredeaux dpb "src/tools/jdeps/proto/deps_go_proto" 25*9e965d6fSRomain Jobredeaux "google.golang.org/protobuf/proto" 26*9e965d6fSRomain Jobredeaux) 27*9e965d6fSRomain Jobredeaux 28*9e965d6fSRomain Jobredeauxvar ( 29*9e965d6fSRomain Jobredeaux in = flag.String("in", "", "Path to input jdeps file") 30*9e965d6fSRomain Jobredeaux target = flag.String("target", "", "Target suffix to remove from jdeps file") 31*9e965d6fSRomain Jobredeaux out = flag.String("out", "", "Path to output jdeps file") 32*9e965d6fSRomain Jobredeaux) 33*9e965d6fSRomain Jobredeaux 34*9e965d6fSRomain Jobredeauxfunc main() { 35*9e965d6fSRomain Jobredeaux flag.Parse() 36*9e965d6fSRomain Jobredeaux if *in == "" || *target == "" || *out == "" { 37*9e965d6fSRomain Jobredeaux log.Fatal("Missing required flags. Must specify --in --target --out.") 38*9e965d6fSRomain Jobredeaux } 39*9e965d6fSRomain Jobredeaux 40*9e965d6fSRomain Jobredeaux bytes, err := ioutil.ReadFile(*in) 41*9e965d6fSRomain Jobredeaux if err != nil { 42*9e965d6fSRomain Jobredeaux log.Fatalf("Error reading input jdeps: %v", err) 43*9e965d6fSRomain Jobredeaux } 44*9e965d6fSRomain Jobredeaux jdeps := &dpb.Dependencies{} 45*9e965d6fSRomain Jobredeaux if err = proto.Unmarshal(bytes, jdeps); err != nil { 46*9e965d6fSRomain Jobredeaux log.Fatalf("Error parsing input jdeps: %v", err) 47*9e965d6fSRomain Jobredeaux } 48*9e965d6fSRomain Jobredeaux 49*9e965d6fSRomain Jobredeaux newJdeps := proto.Clone(jdeps).(*dpb.Dependencies) 50*9e965d6fSRomain Jobredeaux var deps []*dpb.Dependency 51*9e965d6fSRomain Jobredeaux for _, dep := range jdeps.Dependency { 52*9e965d6fSRomain Jobredeaux if !strings.HasSuffix(dep.GetPath(), *target) { 53*9e965d6fSRomain Jobredeaux deps = append(deps, dep) 54*9e965d6fSRomain Jobredeaux } 55*9e965d6fSRomain Jobredeaux } 56*9e965d6fSRomain Jobredeaux newJdeps.Dependency = deps 57*9e965d6fSRomain Jobredeaux 58*9e965d6fSRomain Jobredeaux bytes, err = proto.Marshal(newJdeps) 59*9e965d6fSRomain Jobredeaux if err != nil { 60*9e965d6fSRomain Jobredeaux log.Fatalf("Error serializing output jdeps: %v", err) 61*9e965d6fSRomain Jobredeaux } 62*9e965d6fSRomain Jobredeaux 63*9e965d6fSRomain Jobredeaux err = ioutil.WriteFile(*out, bytes, 0644) 64*9e965d6fSRomain Jobredeaux if err != nil { 65*9e965d6fSRomain Jobredeaux log.Fatalf("Error writing output jdeps: %v", err) 66*9e965d6fSRomain Jobredeaux } 67*9e965d6fSRomain Jobredeaux} 68