src/main.go

changeset 5
08333803df48
parent 4
e24fc79b7980
child 6
66cb1937078f
equal deleted inserted replaced
4:e24fc79b7980 5:08333803df48
122 if err != nil && !os.IsExist(err) { 122 if err != nil && !os.IsExist(err) {
123 log.Fatal(err) 123 log.Fatal(err)
124 } 124 }
125 125
126 tmp := "tmp" 126 tmp := "tmp"
127 out := "out"
127 128
128 for _, repo := range config.Repository { 129 for _, repo := range config.Repository {
129 if err = create_repo_archive(&repo, tpl, tmp); err != nil { 130 commit := get_commit_info(repo.Path)
131 if commit == nil {
132 log.Print("cannot get current commit info for repo ", repo.Path)
133 continue
134 }
135 result_dir := path.Join(out, commit.Node)
136 _, err := os.Stat(result_dir)
137 if err == nil {
138 log.Printf("repository %s commit %s already built", repo.Path, commit.NodeShort)
139 continue
140 }
141
142 if err := create_repo_archive(&repo, tpl, tmp); err != nil {
130 log.Fatal(err) 143 log.Fatal(err)
131 } 144 }
132 145
133 results := exec_buildenvs(config, &repo, tmp) 146 results := exec_buildenvs(config, &repo, tmp)
134 147
135 err = save_result(&repo, results, tmp) 148 err = save_result(&repo, commit, results, tmp)
149 if err != nil {
150 log.Print("cannot save results for commit ", commit.NodeShort)
151 }
136 } 152 }
137 } 153 }
138 154
139 func create_repo_archive(repo *Repository, tpl *template.Template, tmp_dir string) error { 155 func create_repo_archive(repo *Repository, tpl *template.Template, tmp_dir string) error {
140 // create a build directory, that contains the repository source 156 // create a build directory, that contains the repository source
330 } 346 }
331 347
332 return buildResults 348 return buildResults
333 } 349 }
334 350
335 func get_commit_info(tmp_dir string) *Commit { 351 func get_commit_info(repo_dir string) *Commit {
336 var outb, errb bytes.Buffer 352 var outb, errb bytes.Buffer
337 353
338 commit := &Commit{} 354 commit := &Commit{}
339 355
340 cmd := exec.Command("hg", "log", "-r", ".", "-T", "{rev}\\t{node|short}\\t{node}\\t{date|isodate}") 356 cmd := exec.Command("hg", "log", "-r", ".", "-T", "{rev}\\t{node|short}\\t{node}\\t{date|isodate}")
341 cmd.Dir = path.Join(tmp_dir, "build/src") 357 cmd.Dir = repo_dir
342 cmd.Stdout = &outb 358 cmd.Stdout = &outb
343 cmd.Stderr = &errb 359 cmd.Stderr = &errb
344 if err := cmd.Run(); err != nil { 360 if err := cmd.Run(); err != nil {
345 log.Print(outb.String()) 361 log.Print(outb.String())
346 log.Print(errb.String()) 362 log.Print(errb.String())
361 377
362 outb.Reset() 378 outb.Reset()
363 errb.Reset() 379 errb.Reset()
364 380
365 cmd = exec.Command("hg", "log", "-r", ".", "-T", "{author}") 381 cmd = exec.Command("hg", "log", "-r", ".", "-T", "{author}")
366 cmd.Dir = path.Join(tmp_dir, "build/src") 382 cmd.Dir = repo_dir
367 cmd.Stdout = &outb 383 cmd.Stdout = &outb
368 cmd.Stderr = &errb 384 cmd.Stderr = &errb
369 if err := cmd.Run(); err != nil { 385 if err := cmd.Run(); err != nil {
370 log.Print(outb.String()) 386 log.Print(outb.String())
371 log.Print(errb.String()) 387 log.Print(errb.String())
372 return nil 388 return nil
373 } 389 }
374 commit.Author = outb.String() 390 commit.Author = outb.String()
375 391
376 cmd = exec.Command("hg", "log", "-r", ".", "-T", "{desc}") 392 cmd = exec.Command("hg", "log", "-r", ".", "-T", "{desc}")
377 cmd.Dir = path.Join(tmp_dir, "build/src") 393 cmd.Dir = repo_dir
378 cmd.Stdout = &outb 394 cmd.Stdout = &outb
379 cmd.Stderr = &errb 395 cmd.Stderr = &errb
380 if err := cmd.Run(); err != nil { 396 if err := cmd.Run(); err != nil {
381 log.Print(outb.String()) 397 log.Print(outb.String())
382 log.Print(errb.String()) 398 log.Print(errb.String())
385 commit.Desc = outb.String() 401 commit.Desc = outb.String()
386 402
387 return commit 403 return commit
388 } 404 }
389 405
390 func save_result(repo *Repository, result []BuildEnvResult, tmp_dir string) error { 406 func save_result(repo *Repository, commit *Commit, result []BuildEnvResult, tmp_dir string) error {
391 //out_dir := "out/" 407 out_dir := "out/"
392 408 src := path.Join(tmp_dir, "result")
393 // get commit infos 409 dst := path.Join(out_dir, commit.Node)
394 get_commit_info(tmp_dir) 410
411 // move result
412 if err := os.Rename(src, dst); err != nil {
413 return err
414 }
395 415
396 return nil 416 return nil
397 } 417 }

mercurial