2016-08-29 21:10:06 +00:00
/ *
Copyright 2016 The Kubernetes Authors .
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 .
* /
package main
import (
"encoding/json"
2017-04-06 07:21:27 +00:00
"fmt"
2016-08-29 21:10:06 +00:00
"log"
"os"
"strings"
2017-02-28 07:37:28 +00:00
flag "github.com/spf13/pflag"
2016-08-29 21:10:06 +00:00
)
var (
2017-04-06 07:21:27 +00:00
godepsFile = flag . String ( "godeps-file" , "" , "absolute path to Godeps.json" )
overrideImportPath = flag . String ( "override-import-path" , "" , "import path to be written into the Godeps.json, e.g., k8s.io/client-go" )
ignoredPrefixes = flag . StringSlice ( "ignored-prefixes" , [ ] string { "k8s.io/" } , "any godep entry prefixed with the ignored-prefix will be deleted from Godeps.json" )
rewrittenPrefixes = flag . StringSlice ( "rewritten-prefixes" , [ ] string { } , fmt . Sprintf ( "any godep entry prefixed with the rewritten-prefix will be filled will dummy rev %q; overridden by ignored-prefixes" , dummyRev ) )
2016-08-29 21:10:06 +00:00
)
2017-02-28 07:37:28 +00:00
const dummyRev = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
2016-08-29 21:10:06 +00:00
type Dependency struct {
ImportPath string
Rev string
}
type Godeps struct {
ImportPath string
GoVersion string
GodepVersion string
Packages [ ] string ` json:",omitempty" ` // Arguments to save, if any.
Deps [ ] Dependency
}
2017-02-02 08:11:52 +00:00
// rewrites the Godeps.ImportPath, removes the Deps whose ImportPath contains "k8s.io/kubernetes" or "k8s.io/apimachinery".
// entries for k8s.io/apimahinery will be written by the publishing robot before publishing to the repository.
2016-08-29 21:10:06 +00:00
func main ( ) {
flag . Parse ( )
var g Godeps
if len ( * godepsFile ) == 0 {
2017-02-02 08:11:52 +00:00
log . Fatalf ( "absolute path to Godeps.json is required" )
2016-08-29 21:10:06 +00:00
}
f , err := os . OpenFile ( * godepsFile , os . O_RDWR , 0666 )
if err != nil {
log . Fatalf ( "cannot open file %q: %v" , * godepsFile , err )
}
defer f . Close ( )
err = json . NewDecoder ( f ) . Decode ( & g )
if err != nil {
log . Fatalf ( "Unable to parse %q: %v" , * godepsFile , err )
}
2017-04-06 07:21:27 +00:00
if len ( * overrideImportPath ) != 0 {
g . ImportPath = * overrideImportPath
}
2016-08-29 21:10:06 +00:00
// removes the Deps whose ImportPath contains "k8s.io/kubernetes"
i := 0
for _ , dep := range g . Deps {
2017-02-28 07:37:28 +00:00
ignored := false
for _ , ignoredPrefix := range * ignoredPrefixes {
if strings . HasPrefix ( dep . ImportPath , ignoredPrefix ) {
ignored = true
}
}
if ignored {
2017-01-16 21:20:38 +00:00
continue
}
2017-02-28 07:37:28 +00:00
rewritten := false
for _ , rewrittenPrefix := range * rewrittenPrefixes {
if strings . HasPrefix ( dep . ImportPath , rewrittenPrefix ) {
rewritten = true
}
}
if rewritten {
dep . Rev = dummyRev
}
2016-08-29 21:10:06 +00:00
g . Deps [ i ] = dep
i ++
}
g . Deps = g . Deps [ : i ]
b , err := json . MarshalIndent ( g , "" , "\t" )
if err != nil {
log . Fatal ( err )
}
n , err := f . WriteAt ( append ( b , '\n' ) , 0 )
if err != nil {
log . Fatal ( err )
}
if err := f . Truncate ( int64 ( n ) ) ; err != nil {
log . Fatal ( err )
}
}