Skip to content
This repository was archived by the owner on Sep 30, 2022. It is now read-only.

Commit 9bcd17f

Browse files
committed
Spit out bitsadmin command after upload, add Makefile, update Git URL
1 parent 7243ca7 commit 9bcd17f

File tree

3 files changed

+45
-25
lines changed

3 files changed

+45
-25
lines changed

Makefile

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
upload: winstrap.go build.go upload.go
2+
go run winstrap.go build.go upload.go -upload

build.go

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ func notWindowsMain() {
5353
fileName := fmt.Sprintf("winstrap-%s-%s.exe", date, digest[:7])
5454
check(Upload(fileName, f))
5555
log.Printf("uploaded %s", fileName)
56+
log.Printf("Paste this into Windows:\n bitsadmin /transfer mydownloadjob /download /priority normal https://storage.googleapis.com/winstrap/%s c:\\users\\wingopher\\Desktop\\winstrap.exe\n", fileName)
5657
}
5758
}
5859

winstrap.go

+42-25
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,12 @@ import (
1616
"path/filepath"
1717
"runtime"
1818
"strings"
19-
"sync"
2019
)
2120

2221
var files = map[string]string{
2322
"tdm64-gcc-4.8.1-3.exe": "http://downloads.sourceforge.net/project/tdm-gcc/TDM-GCC%20Installer/tdm64-gcc-4.8.1-3.exe?r=http%3A%2F%2Ftdm-gcc.tdragon.net%2Fdownload&ts=1407729829&use_mirror=ufpr",
2423
wixFilename: "http://download-codeplex.sec.s-msft.com/Download/Release?ProjectName=wix&DownloadId=204417&FileTime=129409234222130000&Build=20919",
25-
"Git.exe": "https://github.com/msysgit/msysgit/releases/download/Git-1.9.4-preview20140929/Git-1.9.4-preview20140929.exe",
26-
27-
// Previously:
28-
// "Mercurial.exe": "http://mercurial.selenic.com/release/windows/Mercurial-3.1-x64.exe",
24+
"Git.exe": "https://github.com/msysgit/msysgit/releases/download/Git-1.9.5-preview20141217/Git-1.9.5-preview20141217.exe",
2925
}
3026

3127
const wixFilename = "Wix35.msi"
@@ -38,37 +34,59 @@ var (
3834
homeDir = flag.String("home", defaultHome(), "custom home directory")
3935
)
4036

37+
func waitForGo() {
38+
if !awaitString("go") {
39+
log.Printf("Canceled.")
40+
awaitEnter()
41+
os.Exit(0)
42+
}
43+
}
44+
4145
func main() {
4246
if runtime.GOOS != "windows" {
4347
altMain()
4448
return
4549
}
4650
flag.Parse()
4751
if !*flagYes {
48-
log.Printf("This program will install Go, Mingw, Git, etc. Type 'go<enter>' to proceed.")
49-
if !awaitString("go") {
50-
log.Printf("Canceled.")
51-
awaitEnter()
52-
return
53-
}
52+
log.Printf("This program will first download TDM-GCC, Wix, and Git, then let you optinally install Go and do a release.\nType 'go<enter>' to proceed.")
53+
waitForGo()
5454
}
5555

5656
log.Printf("Downloading files.")
57-
var wg sync.WaitGroup
57+
var errs []chan error
5858
for file, url := range files {
5959
if !*release && file == wixFilename {
6060
continue
6161
}
62-
wg.Add(1)
63-
go download(file, url, &wg)
62+
errc := make(chan error)
63+
errs = append(errs, errc)
64+
go func(file, url string) {
65+
errc <- download(file, url)
66+
}(file, url)
67+
}
68+
var anyErr bool
69+
for _, errc := range errs {
70+
if err := <-errc; err != nil {
71+
log.Printf("Download error: %v", err)
72+
anyErr = true
73+
}
74+
}
75+
if anyErr {
76+
log.Printf("Download errors. Proceed? Type 'go'")
77+
waitForGo()
6478
}
65-
wg.Wait()
6679

6780
checkGit()
6881
checkGcc()
6982

83+
log.Printf("This program will now check out go. Type 'go' to proceed.")
84+
waitForGo()
85+
7086
checkoutGo()
7187

88+
log.Printf("This program will now compile Go for 386 and amd64. Type 'go' to proceed.")
89+
waitForGo()
7290
runGoMakeBat("386")
7391
runGoMakeBat("amd64")
7492

@@ -184,10 +202,10 @@ func checkGcc() {
184202

185203
func checkoutGo() {
186204
if fileExists(goroot()) {
187-
log.Printf("GOROOT %s already exists; skipping hg checkout", goroot())
205+
log.Printf("GOROOT %s already exists; skipping git checkout", goroot())
188206
return
189207
}
190-
log.Printf("Checking out Go source using Mercurial (hg)")
208+
log.Printf("Checking out Go source using git")
191209

192210
git, _ := gitBin()
193211
cmd := exec.Command(git, "clone", "https://go.googlesource.com/go", "goroot")
@@ -235,35 +253,34 @@ func goroot() string { return filepath.Join(home(), "goroot") }
235253

236254
func gopath() string { return filepath.Join(home(), "gopath") }
237255

238-
func download(file, url string, wg *sync.WaitGroup) {
239-
defer wg.Done()
240-
256+
func download(file, url string) error {
241257
dst := filepath.Join(home(), "Desktop", file)
242258
if _, err := os.Stat(dst); err == nil {
243259
log.Printf("%s already on desktop; skipping", file)
244-
return
260+
return nil
245261
}
246262

247263
res, err := http.Get(url)
248264
if err != nil {
249-
log.Fatalf("Error fetching %v: %v", url, err)
265+
return fmt.Errorf("Error fetching %v: %v", url, err)
250266
}
251267
tmp := dst + ".tmp"
252268
os.Remove(tmp)
253269
os.Remove(dst)
254270
f, err := os.Create(tmp)
255271
if err != nil {
256-
log.Fatal(err)
272+
return err
257273
}
258274
n, err := io.Copy(f, res.Body)
259275
res.Body.Close()
260276
if err != nil {
261-
log.Fatalf("Error reading %v: %v", url, err)
277+
return fmt.Errorf("Error reading %v: %v", url, err)
262278
}
263279
f.Close()
264280
err = os.Rename(tmp, dst)
265281
if err != nil {
266-
log.Fatal(err)
282+
return err
267283
}
268284
log.Printf("Downladed %s (%d bytes) to desktop", file, n)
285+
return nil
269286
}

0 commit comments

Comments
 (0)