mirror of https://github.com/perkeep/perkeep.git
dev/update_closure_compiler: new command
Go program that replaces get_closure_compiler from misc/get_closure.pl Change-Id: Ic7471c970afbfc65bc14d9ec2401aeb0d1ecd9a1
This commit is contained in:
parent
2430cf7a20
commit
f1c0c37cd7
|
@ -0,0 +1,139 @@
|
|||
/*
|
||||
Copyright 2013 The Camlistore 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.
|
||||
*/
|
||||
|
||||
// The updatelibrary command allows to selectively download
|
||||
// from the closure library git repository (at a chosen revision)
|
||||
// the resources needed by the Camlistore ui.
|
||||
package main
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
|
||||
"camlistore.org/pkg/osutil"
|
||||
)
|
||||
|
||||
const (
|
||||
compilerDirURL = "http://closure-compiler.googlecode.com/files/"
|
||||
compilerVersion = "20121212"
|
||||
)
|
||||
|
||||
var rgxVersion = regexp.MustCompile(`.*Version: (.*) \(revision.*`)
|
||||
|
||||
func main() {
|
||||
|
||||
// check JRE presence
|
||||
_, err := exec.LookPath("java")
|
||||
if err != nil {
|
||||
log.Fatal("Didn't find 'java' in $PATH. The Java Runtime Environment is needed to run the closure compiler.\n")
|
||||
}
|
||||
|
||||
camliRootPath, err := osutil.GoPackagePath("camlistore.org")
|
||||
if err != nil {
|
||||
log.Fatal("Package camlistore.org not found in $GOPATH (or $GOPATH not defined).")
|
||||
}
|
||||
destDir := filepath.Join(camliRootPath, "tmp", "closure-compiler")
|
||||
// check if compiler already exists
|
||||
jarFile := filepath.Join(destDir, "compiler.jar")
|
||||
_, err = os.Stat(jarFile)
|
||||
if err == nil {
|
||||
// if compiler exists, check version
|
||||
cmd := exec.Command("java", "-jar", jarFile, "--version", "--help", "2>&1")
|
||||
output, _ := cmd.CombinedOutput()
|
||||
m := rgxVersion.FindStringSubmatch(string(output))
|
||||
if m == nil {
|
||||
log.Fatalf("Could not find compiler version in %q", output)
|
||||
}
|
||||
if m[1] == compilerVersion {
|
||||
log.Printf("compiler already at version %v , nothing to do.", compilerVersion)
|
||||
os.Exit(0)
|
||||
}
|
||||
if err := os.Remove(jarFile); err != nil {
|
||||
log.Fatalf("Could not remove %v: %v", jarFile, err)
|
||||
}
|
||||
} else {
|
||||
if !os.IsNotExist(err) {
|
||||
log.Fatalf("Could not stat %v: %v", jarFile, err)
|
||||
}
|
||||
}
|
||||
|
||||
// otherwise, download compiler
|
||||
log.Printf("Getting closure compiler version %s.\n", compilerVersion)
|
||||
if err := os.MkdirAll(destDir, 0755); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if err := os.Chdir(destDir); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
zipFilename := "compiler-" + compilerVersion + ".zip"
|
||||
compilerURL := compilerDirURL + zipFilename
|
||||
resp, err := http.Get(compilerURL)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
f, err := os.Create(zipFilename)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if _, err := io.Copy(f, resp.Body); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if err := f.Close(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
r, err := zip.OpenReader(zipFilename)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
for x, f := range r.File {
|
||||
if f.FileHeader.Name != "compiler.jar" {
|
||||
if x == len(r.File)-1 {
|
||||
log.Fatal("compiler.jar was not found in the zip archive")
|
||||
}
|
||||
continue
|
||||
}
|
||||
rc, err := f.Open()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
g, err := os.Create(jarFile)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer g.Close()
|
||||
if _, err = io.Copy(g, rc); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
rc.Close()
|
||||
break
|
||||
}
|
||||
|
||||
if err := r.Close(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if err := os.Remove(zipFilename); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Printf("Success. Installed at %v", jarFile)
|
||||
}
|
Loading…
Reference in New Issue