| 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 } |