Skip to content

Commit b27bd42

Browse files
committed
net/url: API
Convert cryptotype to general go1rename fix. Add os.Exec -> syscall.Exec fix along with new URL fixes. Fixes #2946. R=golang-dev, r, dsymonds CC=golang-dev https://golang.org/cl/5672072
1 parent d8e715c commit b27bd42

File tree

6 files changed

+67
-64
lines changed

6 files changed

+67
-64
lines changed

src/cmd/fix/go1pkgrename_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
package main
66

77
func init() {
8-
addTestCases(go1renameTests, go1pkgrename)
8+
addTestCases(go1pkgrenameTests, go1pkgrename)
99
}
1010

11-
var go1renameTests = []testCase{
11+
var go1pkgrenameTests = []testCase{
1212
{
1313
Name: "go1rename.0",
1414
In: `package main

src/cmd/fix/cryptotype.go renamed to src/cmd/fix/go1rename.go

+28-5
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,22 @@
44

55
package main
66

7-
var cryptotypeFix = fix{
8-
"cryptotype",
7+
func init() {
8+
register(go1renameFix)
9+
}
10+
11+
var go1renameFix = fix{
12+
"go1rename",
913
"2012-02-12",
10-
renameFix(cryptotypeReplace),
11-
`Rewrite uses of concrete cipher types to refer to the generic cipher.Block.
14+
renameFix(go1renameReplace),
15+
`Rewrite package-level names that have been renamed in Go 1.
1216
1317
http://codereview.appspot.com/5625045/
18+
http://codereview.appspot.com/5672072/
1419
`,
1520
}
1621

17-
var cryptotypeReplace = []rename{
22+
var go1renameReplace = []rename{
1823
{
1924
OldImport: "crypto/aes",
2025
NewImport: "crypto/cipher",
@@ -33,4 +38,22 @@ var cryptotypeReplace = []rename{
3338
Old: "*des.TripleDESCipher",
3439
New: "cipher.Block",
3540
},
41+
{
42+
OldImport: "net/url",
43+
NewImport: "",
44+
Old: "url.ParseWithReference",
45+
New: "url.Parse",
46+
},
47+
{
48+
OldImport: "net/url",
49+
NewImport: "",
50+
Old: "url.ParseRequest",
51+
New: "url.ParseRequestURI",
52+
},
53+
{
54+
OldImport: "os",
55+
NewImport: "syscall",
56+
Old: "os.Exec",
57+
New: "syscall.Exec",
58+
},
3659
}

src/cmd/fix/cryptotype_test.go renamed to src/cmd/fix/go1rename_test.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -5,38 +5,50 @@
55
package main
66

77
func init() {
8-
addTestCases(cryptotypeTests, cryptotypeFix.f)
8+
addTestCases(go1renameTests, go1renameFix.f)
99
}
1010

11-
var cryptotypeTests = []testCase{
11+
var go1renameTests = []testCase{
1212
{
13-
Name: "cryptotype.0",
13+
Name: "go1rename.0",
1414
In: `package main
1515
1616
import (
1717
"crypto/aes"
1818
"crypto/des"
19+
"net/url"
20+
"os"
1921
)
2022
2123
var (
2224
_ *aes.Cipher
2325
_ *des.Cipher
2426
_ *des.TripleDESCipher
2527
_ = aes.New()
28+
_ = url.Parse
29+
_ = url.ParseWithReference
30+
_ = url.ParseRequest
31+
_ = os.Exec
2632
)
2733
`,
2834
Out: `package main
2935
3036
import (
3137
"crypto/aes"
3238
"crypto/cipher"
39+
"net/url"
40+
"syscall"
3341
)
3442
3543
var (
3644
_ cipher.Block
3745
_ cipher.Block
3846
_ cipher.Block
3947
_ = aes.New()
48+
_ = url.Parse
49+
_ = url.Parse
50+
_ = url.ParseRequestURI
51+
_ = syscall.Exec
4052
)
4153
`,
4254
},

src/pkg/net/http/request.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ func (r *Request) Cookies() []*Cookie {
186186
return readCookies(r.Header, "")
187187
}
188188

189-
var ErrNoCookie = errors.New("http: named cookied not present")
189+
var ErrNoCookie = errors.New("http: named cookie not present")
190190

191191
// Cookie returns the named cookie provided in the request or
192192
// ErrNoCookie if not found.
@@ -486,7 +486,7 @@ func ReadRequest(b *bufio.Reader) (req *Request, err error) {
486486
rawurl = "http://" + rawurl
487487
}
488488

489-
if req.URL, err = url.ParseRequest(rawurl); err != nil {
489+
if req.URL, err = url.ParseRequestURI(rawurl); err != nil {
490490
return nil, err
491491
}
492492

src/pkg/net/url/url.go

+15-22
Original file line numberDiff line numberDiff line change
@@ -321,19 +321,28 @@ func split(s string, c byte, cutc bool) (string, string) {
321321
}
322322

323323
// Parse parses rawurl into a URL structure.
324-
// The string rawurl is assumed not to have a #fragment suffix.
325-
// (Web browsers strip #fragment before sending the URL to a web server.)
326324
// The rawurl may be relative or absolute.
327325
func Parse(rawurl string) (url *URL, err error) {
328-
return parse(rawurl, false)
326+
// Cut off #frag
327+
u, frag := split(rawurl, '#', true)
328+
if url, err = parse(u, false); err != nil {
329+
return nil, err
330+
}
331+
if frag == "" {
332+
return url, nil
333+
}
334+
if url.Fragment, err = unescape(frag, encodeFragment); err != nil {
335+
return nil, &Error{"parse", rawurl, err}
336+
}
337+
return url, nil
329338
}
330339

331-
// ParseRequest parses rawurl into a URL structure. It assumes that
332-
// rawurl was received from an HTTP request, so the rawurl is interpreted
340+
// ParseRequestURI parses rawurl into a URL structure. It assumes that
341+
// rawurl was received in an HTTP request, so the rawurl is interpreted
333342
// only as an absolute URI or an absolute path.
334343
// The string rawurl is assumed not to have a #fragment suffix.
335344
// (Web browsers strip #fragment before sending the URL to a web server.)
336-
func ParseRequest(rawurl string) (url *URL, err error) {
345+
func ParseRequestURI(rawurl string) (url *URL, err error) {
337346
return parse(rawurl, true)
338347
}
339348

@@ -415,22 +424,6 @@ func parseAuthority(authority string) (user *Userinfo, host string, err error) {
415424
return
416425
}
417426

418-
// ParseWithFragment is like Parse but allows a trailing #fragment.
419-
func ParseWithFragment(rawurl string) (url *URL, err error) {
420-
// Cut off #frag
421-
u, frag := split(rawurl, '#', true)
422-
if url, err = Parse(u); err != nil {
423-
return nil, err
424-
}
425-
if frag == "" {
426-
return url, nil
427-
}
428-
if url.Fragment, err = unescape(frag, encodeFragment); err != nil {
429-
return nil, &Error{"parse", rawurl, err}
430-
}
431-
return url, nil
432-
}
433-
434427
// String reassembles the URL into a valid URL string.
435428
func (u *URL) String() string {
436429
// TODO: Rewrite to use bytes.Buffer

src/pkg/net/url/url_test.go

+5-30
Original file line numberDiff line numberDiff line change
@@ -188,22 +188,6 @@ var urltests = []URLTest{
188188
},
189189
"http://user:[email protected]",
190190
},
191-
}
192-
193-
var urlnofragtests = []URLTest{
194-
{
195-
"http://www.google.com/?q=go+language#foo",
196-
&URL{
197-
Scheme: "http",
198-
Host: "www.google.com",
199-
Path: "/",
200-
RawQuery: "q=go+language#foo",
201-
},
202-
"",
203-
},
204-
}
205-
206-
var urlfragtests = []URLTest{
207191
{
208192
"http://www.google.com/?q=go+language#foo",
209193
&URL{
@@ -257,12 +241,6 @@ func DoTest(t *testing.T, parse func(string) (*URL, error), name string, tests [
257241

258242
func TestParse(t *testing.T) {
259243
DoTest(t, Parse, "Parse", urltests)
260-
DoTest(t, Parse, "Parse", urlnofragtests)
261-
}
262-
263-
func TestParseWithFragment(t *testing.T) {
264-
DoTest(t, ParseWithFragment, "ParseWithFragment", urltests)
265-
DoTest(t, ParseWithFragment, "ParseWithFragment", urlfragtests)
266244
}
267245

268246
const pathThatLooksSchemeRelative = "//[email protected]/just/a/path"
@@ -281,16 +259,16 @@ var parseRequestUrlTests = []struct {
281259
{"../dir/", false},
282260
}
283261

284-
func TestParseRequest(t *testing.T) {
262+
func TestParseRequestURI(t *testing.T) {
285263
for _, test := range parseRequestUrlTests {
286-
_, err := ParseRequest(test.url)
264+
_, err := ParseRequestURI(test.url)
287265
valid := err == nil
288266
if valid != test.expectedValid {
289267
t.Errorf("Expected valid=%v for %q; got %v", test.expectedValid, test.url, valid)
290268
}
291269
}
292270

293-
url, err := ParseRequest(pathThatLooksSchemeRelative)
271+
url, err := ParseRequestURI(pathThatLooksSchemeRelative)
294272
if err != nil {
295273
t.Fatalf("Unexpected error %v", err)
296274
}
@@ -319,9 +297,6 @@ func DoTestString(t *testing.T, parse func(string) (*URL, error), name string, t
319297

320298
func TestURLString(t *testing.T) {
321299
DoTestString(t, Parse, "Parse", urltests)
322-
DoTestString(t, Parse, "Parse", urlnofragtests)
323-
DoTestString(t, ParseWithFragment, "ParseWithFragment", urltests)
324-
DoTestString(t, ParseWithFragment, "ParseWithFragment", urlfragtests)
325300
}
326301

327302
type EscapeTest struct {
@@ -538,7 +513,7 @@ var resolveReferenceTests = []struct {
538513

539514
func TestResolveReference(t *testing.T) {
540515
mustParse := func(url string) *URL {
541-
u, err := ParseWithFragment(url)
516+
u, err := Parse(url)
542517
if err != nil {
543518
t.Fatalf("Expected URL to parse: %q, got error: %v", url, err)
544519
}
@@ -589,7 +564,7 @@ func TestResolveReference(t *testing.T) {
589564

590565
func TestResolveReferenceOpaque(t *testing.T) {
591566
mustParse := func(url string) *URL {
592-
u, err := ParseWithFragment(url)
567+
u, err := Parse(url)
593568
if err != nil {
594569
t.Fatalf("Expected URL to parse: %q, got error: %v", url, err)
595570
}

0 commit comments

Comments
 (0)