<div dir="ltr">r305741.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 19, 2017 at 1:28 PM, Mehdi AMINI <span dir="ltr"><<a href="mailto:joker.eph@gmail.com" target="_blank">joker.eph@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I'm asking you to revert now.<span class="HOEnZb"><font color="#888888"><div><br></div><div>-- </div><div>Mehdi</div><div><br></div></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">2017-06-19 13:26 GMT-07:00 Peter Collingbourne <span dir="ltr"><<a href="mailto:peter@pcc.me.uk" target="_blank">peter@pcc.me.uk</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I'm not interested in participating in an extended bikeshedding debate on the merits of this or that language. Nor am I interested in rewriting it myself in some other language. I just wanted to publish a tool that I wrote that I find useful in the hope that others would too.<div><br></div><div>I find it sad that this is the reaction, but if people would really prefer not to have the tool, I will remove it.<br><div><div><br></div><div><div>Peter</div></div></div></div></div><div class="gmail_extra"><div><div class="m_6306357654448793466h5"><br><div class="gmail_quote">On Mon, Jun 19, 2017 at 12:58 PM, Mehdi AMINI <span dir="ltr"><<a href="mailto:joker.eph@gmail.com" target="_blank">joker.eph@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">At least, I'd expect some agreement on llvm-dev if it is OK or not to have llvm dev tools depending on go before committing any.<span class="m_6306357654448793466m_-3383558242308435587HOEnZb"><font color="#888888"><div><br></div><div><br></div><div>-- </div><div>Mehdi</div></font></span></div><div class="m_6306357654448793466m_-3383558242308435587HOEnZb"><div class="m_6306357654448793466m_-3383558242308435587h5"><div class="gmail_extra"><br><div class="gmail_quote">2017-06-19 12:57 GMT-07:00 Mehdi AMINI <span dir="ltr"><<a href="mailto:joker.eph@gmail.com" target="_blank">joker.eph@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I agree, this shouldn't be in go. <span class="m_6306357654448793466m_-3383558242308435587m_2204140533324845484HOEnZb"><font color="#888888"><div><br></div><div>-- </div><div>Mehdi</div><div><br></div></font></span></div><div class="m_6306357654448793466m_-3383558242308435587m_2204140533324845484HOEnZb"><div class="m_6306357654448793466m_-3383558242308435587m_2204140533324845484h5"><div class="gmail_extra"><br><div class="gmail_quote">2017-06-19 10:59 GMT-07:00 Peter Collingbourne via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">I don't particularly care which language it is written in. I chose Go because I felt most productive in it, and because it seemed entirely suitable under the coding guidelines (or so I thought).</div><div class="gmail_quote"><br></div><div class="gmail_quote">If someone wants to rewrite it in python, that's fine with me. But it seems more useful to have the tool written in Go than not at all.</div><div class="gmail_quote"><br></div><div class="gmail_quote">Peter</div><div><div class="m_6306357654448793466m_-3383558242308435587m_2204140533324845484m_5917387912261076876h5"><div class="gmail_quote"><br></div><div class="gmail_quote">On Mon, Jun 19, 2017 at 10:02 AM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><br><div class="gmail_quote"><span><div dir="ltr">On Mon, Jun 19, 2017 at 10:00 AM Peter Collingbourne <<a href="mailto:peter@pcc.me.uk" target="_blank">peter@pcc.me.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">We already use Go in the LLVM project in a few places (llgo, llvm-go and the Go bindings). </div></blockquote></span><div><br>Those somewhat necessarily have to use go - and anyone interested in them probably has some context in Go.<br> </div><span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">We even have a section about it in the coding standards:<div><br></div><div><a href="http://llvm.org/docs/CodingStandards.html#other-languages" target="_blank">http://llvm.org/docs/CodingSta<wbr>ndards.html#other-languages</a><br></div><div><br></div><div>So I don't see a problem with using Go for this tool, especially given that it is relatively isolated.</div></div></blockquote></span><div><br>Seems like it has broader applicability/usage, though, than the existing go usage.<br><br>- Dave<br> </div><div><div class="m_6306357654448793466m_-3383558242308435587m_2204140533324845484m_5917387912261076876m_-7775749548534778085h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><br></div><div>Peter</div></div><div class="gmail_extra"></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 19, 2017 at 9:48 AM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I think it's probably best to use a language already used in the LLVM project (Python? Bash?) than branching out into another language (Go) in terms of maintainability by other LLVM developers?</div><div class="m_6306357654448793466m_-3383558242308435587m_2204140533324845484m_5917387912261076876m_-7775749548534778085m_2867081774626708496m_2529484307852523862HOEnZb"><div class="m_6306357654448793466m_-3383558242308435587m_2204140533324845484m_5917387912261076876m_-7775749548534778085m_2867081774626708496m_2529484307852523862h5"><br><div class="gmail_quote"><div dir="ltr">On Fri, Jun 16, 2017 at 3:15 PM Peter Collingbourne via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: pcc<br>
Date: Fri Jun 16 17:15:18 2017<br>
New Revision: 305598<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=305598&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=305598&view=rev</a><br>
Log:<br>
utils: Add a git-r utility for mapping svn revisions to git revisions in the monorepo.<br>
<br>
Added:<br>
    llvm/trunk/utils/git-svn/git-r<wbr>/<br>
    llvm/trunk/utils/git-svn/git-r<wbr>/git-r.go<br>
<br>
Added: llvm/trunk/utils/git-svn/git-r<wbr>/git-r.go<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/git-svn/git-r/git-r.go?rev=305598&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/git-svn<wbr>/git-r/git-r.go?rev=305598&vie<wbr>w=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/git-svn/git-r<wbr>/git-r.go (added)<br>
+++ llvm/trunk/utils/git-svn/git-r<wbr>/git-r.go Fri Jun 16 17:15:18 2017<br>
@@ -0,0 +1,169 @@<br>
+//===- git-r.go - svn revisions to git revisions --------------------------===/<wbr>/<br>
+//<br>
+//                     The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===------------------------<wbr>------------------------------<wbr>----------------===//<br>
+//<br>
+// This is a small program for mapping svn revisions to git revisions in the<br>
+// monorepo.<br>
+//<br>
+// To set up:<br>
+// 1) <a href="http://llvm.org/docs/GettingStarted.html#for-developers-to-work-with-a-git-monorepo" rel="noreferrer" target="_blank">http://llvm.org/docs/GettingSt<wbr>arted.html#for-developers-to-w<wbr>ork-with-a-git-monorepo</a><br>
+//    and make sure to follow the instructions for fetching commit notes.<br>
+// 2) go build<br>
+// 3) cp git-r ~/bin<br>
+//<br>
+// To use:<br>
+// $ git r 1<br>
+// 09c4b68e68c4fcff64b00e1ac077c4<wbr>f4a524cbcc<br>
+//<br>
+//===------------------------<wbr>------------------------------<wbr>----------------===//<br>
+<br>
+package main<br>
+<br>
+import (<br>
+       "bufio"<br>
+       "bytes"<br>
+       "encoding/gob"<br>
+       "fmt"<br>
+       "log"<br>
+       "os"<br>
+       "os/exec"<br>
+       "strconv"<br>
+       "strings"<br>
+)<br>
+<br>
+func git(args ...string) (*bytes.Buffer, error) {<br>
+       cmd := exec.Command("git", args...)<br>
+<br>
+       var b bytes.Buffer<br>
+       cmd.Stdout = &b<br>
+       err := cmd.Run()<br>
+<br>
+       return &b, err<br>
+}<br>
+<br>
+func mkrevmap() []string {<br>
+       revs, err := git("grep", "git-svn-rev", "refs/notes/commits")<br>
+       if err != nil {<br>
+               panic(err)<br>
+       }<br>
+<br>
+       var revmap []string<br>
+<br>
+       scanner := bufio.NewScanner(revs)<br>
+       for scanner.Scan() {<br>
+               // refs/notes/commits:00/0b/d4acb<wbr>454290301c140a1d9c4f7a45aa2fa9<wbr>c:git-svn-rev: 37235<br>
+<br>
+               bits := strings.Split(scanner.Text(), ":")<br>
+               gitrev := strings.Replace(bits[1], "/", "", -1)<br>
+               svnrev := bits[3][1:]<br>
+<br>
+               svnrevn, err := strconv.Atoi(svnrev)<br>
+               if err != nil {<br>
+                       panic(err)<br>
+               }<br>
+<br>
+               if svnrevn >= len(revmap) {<br>
+                       newrevmap := make([]string, svnrevn+1)<br>
+                       copy(newrevmap, revmap)<br>
+                       revmap = newrevmap<br>
+               }<br>
+               revmap[svnrevn] = gitrev<br>
+       }<br>
+<br>
+       return revmap<br>
+}<br>
+<br>
+type revmap struct {<br>
+       Noterev string<br>
+       Revs    []string<br>
+}<br>
+<br>
+func writerevmap(path string, rmap *revmap, svnrev int) {<br>
+       noterevbuf, err := git("rev-parse", "refs/notes/commits")<br>
+       if err != nil {<br>
+               fmt.Fprintf(os.Stderr, "%s: could not find refs/notes/commits, see instructions:\n", os.Args[0])<br>
+               fmt.Fprintln(os.Stderr, "<a href="http://llvm.org/docs/GettingStarted.html#for-developers-to-work-with-a-git-monorepo" rel="noreferrer" target="_blank">http://llvm.org/docs/GettingS<wbr>tarted.html#for-developers-to-<wbr>work-with-a-git-monorepo</a>")<br>
+               os.Exit(1)<br>
+       }<br>
+       noterev := noterevbuf.String()<br>
+       noterev = noterev[:len(noterev)-1]<br>
+<br>
+       if rmap == nil || rmap.Noterev != noterev {<br>
+               var newrmap revmap<br>
+               newrmap.Revs = mkrevmap()<br>
+               newrmap.Noterev = noterev<br>
+<br>
+               f, err := os.Create(path)<br>
+               if err != nil {<br>
+                       panic(err)<br>
+               }<br>
+<br>
+               enc := gob.NewEncoder(f)<br>
+               err = enc.Encode(newrmap)<br>
+               if err != nil {<br>
+                       os.Remove(path)<br>
+                       panic(err)<br>
+               }<br>
+<br>
+               rmap = &newrmap<br>
+       }<br>
+<br>
+       if svnrev >= len(rmap.Revs) || rmap.Revs[svnrev] == "" {<br>
+               fmt.Fprintf(os.Stderr, "%s: %d: unknown revision\n", os.Args[0], svnrev)<br>
+               os.Exit(1)<br>
+       }<br>
+<br>
+       fmt.Println(rmap.Revs[svnrev]<wbr>)<br>
+}<br>
+<br>
+func main() {<br>
+       if len(os.Args) != 2 {<br>
+               fmt.Fprintf(os.Stderr, "%s: expected a single argument\n", os.Args[0])<br>
+               os.Exit(1)<br>
+       }<br>
+       svnrev, err := strconv.Atoi(os.Args[1])<br>
+       if err != nil {<br>
+               fmt.Fprintf(os.Stderr, "%s: %s: expected an integer argument\n", os.Args[0], os.Args[1])<br>
+               os.Exit(1)<br>
+       }<br>
+<br>
+       gitdirbuf, err := git("rev-parse", "--git-common-dir")<br>
+       if err != nil {<br>
+               fmt.Fprintf(os.Stderr, "%s: not in a git repository\n", os.Args[0])<br>
+               os.Exit(1)<br>
+       }<br>
+<br>
+       gitdir := gitdirbuf.String()<br>
+       gitdir = gitdir[:len(gitdir)-1]<br>
+       err = os.Chdir(gitdir)<br>
+       if err != nil {<br>
+               panic(err)<br>
+       }<br>
+<br>
+       mappath := "git-svn-revmap-cache"<br>
+       f, err := os.Open(mappath)<br>
+       if err != nil {<br>
+               writerevmap(mappath, nil, svnrev)<br>
+               return<br>
+       }<br>
+<br>
+       dec := gob.NewDecoder(f)<br>
+       var rmap revmap<br>
+       err = dec.Decode(&rmap)<br>
+       if err != nil {<br>
+               writerevmap(mappath, nil, svnrev)<br>
+               return<br>
+       }<br>
+<br>
+       if svnrev < len(rmap.Revs) && rmap.Revs[svnrev] != "" {<br>
+               fmt.Println(rmap.Revs[svnrev]<wbr>)<br>
+               return<br>
+       }<br>
+<br>
+       writerevmap(mappath, &rmap, svnrev)<br>
+}<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div></div><div class="gmail_extra">-- <br><div class="m_6306357654448793466m_-3383558242308435587m_2204140533324845484m_5917387912261076876m_-7775749548534778085m_2867081774626708496m_2529484307852523862gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</div></blockquote></div></div></div></div>
</blockquote></div><br><br clear="all"><div><br></div></div></div><span class="m_6306357654448793466m_-3383558242308435587m_2204140533324845484m_5917387912261076876HOEnZb"><font color="#888888">-- <br><div class="m_6306357654448793466m_-3383558242308435587m_2204140533324845484m_5917387912261076876m_-7775749548534778085gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</font></span></div></div>
<br>______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div></div></div><span class="m_6306357654448793466HOEnZb"><font color="#888888">-- <br><div class="m_6306357654448793466m_-3383558242308435587gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</font></span></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</div>