<!-- Contributing to the Go project -->
-<!-- TODO(rsc):
- Mention community resources like IRC, mailing lists,
- change list email groups, etc.
--->
-
<h2>Introduction</h2>
<p>
has been written.
</p>
+<h2>Community resources</h2>
+
+<p>
+For real-time help, there may be users or developers on the
+<code>#go-nuts</code> on the <a href="http://freenode.net/">Freenode</a> IRC server.
+</p>
+
+<p>
+The official mailing list for discussion of the Go language is
+<a href="http://groups.google.com/group/golang-nuts">Go Nuts</a>.
+</p>
+
+<p>
+Bugs can be reported using the <a href="http://code.google.com/p/go/issues/list">Go issue tracker</a>.
+</p>
+
+<p>
+For those who wish to keep up with development,
+there is another mailing list, <a href="http://groups.google.com/group/golang-checkins">golang-checkins</a>,
+that receives a message summarizing each checkin to the Go repository.
+</p>
+
+
<h2>Creating a new package</h2>
<p>
<p>
The code review server uses a Google Account to authenticate.
(If you can use the account to
-<a href="https://www.google.com/accounts/Login?hl=en&continue=http://www.google.com/">sign in at google.com</a>,
+<a href="https://www.google.com/accounts/Login?hl=en&continue=http://www.google.com/">sign in at google.com</a>,
you can use it to sign in to the code review server.)
</p>
<i>merging src/pkg/flag/flag_test.go failed!</i>
1 file updated, 0 files merged, 0 files removed, 1 file unresolved
use 'hg resolve' to retry unresolved file merges
-$
+$
</pre>
<p>
</p>
<p>
-If you had been editing the file, say for debugging, but do not
-care to preserve your changes, you can run
+If you had been editing the file, say for debugging, but do not
+care to preserve your changes, you can run
<code>hg revert flag_test.go</code> to abandon your
changes.
</p>
</p>
<p class="rule">
-For any <code>sync.Mutex</code> variable <code>l</code> and <i>n</i> < <i>m</i>,
+For any <code>sync.Mutex</code> or <code>sync.RWMutex</code> variable <code>l</code> and <i>n</i> < <i>m</i>,
the <i>n</i>'th call to <code>l.Unlock()</code> happens before the <i>m</i>'th call to <code>l.Lock()</code> returns.
</p>
which happens before the <code>print</code>.
</p>
-<p>
-TODO(rsc): <code>sync.RWMutex</code>.
+<p class="rule">
+For any call to <code>l.RLock</code> on a <code>sync.RWMutex</code> variable <code>l</code>,
+there is an <i>n</i> such that the <code>l.RLock</code> happens (returns) after the <i>n</i>'th call to
+<code>l.Unlock</code> and the matching <code>l.RUnlock</code> happens
+before the <i>n</i>+1'th call to <code>l.Lock</code>.
</p>
<h3>Once</h3>
sync_changes(ui, repo)
def sync_note(msg):
- if msg == 'resolving manifests\n' or msg == 'searching for changes\n':
+ # we run sync (pull -u) in verbose mode to get the
+ # list of files being updated, but that drags along
+ # a bunch of messages we don't care about.
+ # omit them.
+ if msg == 'resolving manifests\n':
+ return
+ if msg == 'searching for changes\n':
+ return
+ if msg == "couldn't find merge tool hgmerge\n":
return
sys.stdout.write(msg)
case OCONVIFACE:
case OARRAYBYTESTR:
case ORUNESTR:
- if(n->type->sym == S)
+ if(n->type == T || n->type->sym == S)
fmtprint(f, "(%T)(", n->type);
else
fmtprint(f, "%T(", n->type);
)
-// TODO:
-// - maybe define an interface
-// - Reader: ReadRune, UnreadRune ?
-// could make ReadRune generic if we dropped UnreadRune
-// - buffered output
-
const (
defaultBufSize = 4096;
)
}
// Inflate state.
-// TODO(rsc): Expose this or not?
type inflater struct {
// Input/output sources.
r Reader;
package hmac
-// TODO(rsc): better test
-
import (
"hash";
"fmt";
last := 0;
for i := 0; i < len(s)-1; i++ {
if s[i] == s[i+1] && (s[i] == '`' || s[i] == '\'') {
- template.HtmlEscape(w, s[last:i]);
+ template.HTMLEscape(w, s[last:i]);
last = i+2;
switch s[i] {
case '`':
i++; // loop will add one more
}
}
- template.HtmlEscape(w, s[last:len(s)]);
+ template.HTMLEscape(w, s[last:len(s)]);
}
//
// TODO(rsc): I'd like to pass in an array of variable names []string
// and then italicize those strings when they appear as words.
-func ToHtml(w io.Writer, s []byte) {
+func ToHTML(w io.Writer, s []byte) {
inpara := false;
- /* TODO(rsc): 6g cant generate code for these
close := func() {
if inpara {
w.Write(html_endp);
inpara = true;
}
};
- */
lines := split(s);
unindent(lines);
line := lines[i];
if isBlank(line) {
// close paragraph
- if inpara {
- w.Write(html_endp);
- inpara = false;
- }
+ close();
i++;
continue;
}
if indentLen(line) > 0 {
// close paragraph
- if inpara {
- w.Write(html_endp);
- inpara = false;
- }
+ close();
// count indented or blank lines
j := i+1;
// just html escaping
w.Write(html_pre);
for _, line := range block {
- template.HtmlEscape(w, line);
+ template.HTMLEscape(w, line);
}
w.Write(html_endpre);
continue;
}
// open paragraph
- if !inpara {
- w.Write(html_p);
- inpara = true;
- }
+ open();
commentEscape(w, lines[i]);
i++;
}
- if inpara {
- w.Write(html_endp);
- inpara = false;
- }
+ close();
}
var p parser;
p.init(filename, data, 0);
- x := p.parseExpr(); // TODO 6g bug - function call order in expr lists
- return x, p.GetError(scanner.Sorted);
+ return p.parseExpr(), p.GetError(scanner.Sorted);
}
var p parser;
p.init(filename, data, 0);
- list := p.parseStmtList(); // TODO 6g bug - function call order in expr lists
- return list, p.GetError(scanner.Sorted);
+ return p.parseStmtList(), p.GetError(scanner.Sorted);
}
var p parser;
p.init(filename, data, 0);
- list := p.parseDeclList(); // TODO 6g bug - function call order in expr lists
- return list, p.GetError(scanner.Sorted);
+ return p.parseDeclList(), p.GetError(scanner.Sorted);
}
var p parser;
p.init(filename, data, mode);
- prog := p.parseFile(); // TODO 6g bug - function call order in expr lists
- return prog, p.GetError(scanner.NoMultiples);
+ return p.parseFile(), p.GetError(scanner.NoMultiples);
}
// A common failure mode on Darwin is to get 0, 0,
// because it returns the time in registers instead of
// filling in the structure passed to the system call.
- // TODO(rsc): Too bad the compiler doesn't know that
+ // Too bad the compiler doesn't know that
// 365.24*86400 is an integer.
sec, nsec, err := Time();
if sec < (2009-1970)*36524*864 {