diff --git a/godoc/redirect/redirect.go b/godoc/redirect/redirect.go index 3bec5337..8208518c 100644 --- a/godoc/redirect/redirect.go +++ b/godoc/redirect/redirect.go @@ -115,7 +115,7 @@ var redirects = map[string]string{ "/tour": "http://tour.golang.org", "/wiki": "https://github.com/golang/go/wiki", - "/doc/articles/c_go_cgo.html": "/blog/c-go-cgo", + "/doc/articles/c_go_cgo.html": "/blog/c-go-cgo", "/doc/articles/concurrency_patterns.html": "/blog/go-concurrency-patterns-timing-out-and", "/doc/articles/defer_panic_recover.html": "/blog/defer-panic-and-recover", "/doc/articles/error_handling.html": "/blog/error-handling-and-go", @@ -191,9 +191,13 @@ func clHandler(w http.ResponseWriter, r *http.Request) { return } target := "" - // the first CL in rietveld is about 152046, so only treat the id as - // a rietveld CL if it is larger than 150000. - if n, err := strconv.Atoi(id); err == nil && n > 150000 { + + if n, err := strconv.Atoi(id); err == nil && isRietveldCL(n) { + // TODO: Issue 28836: if this Rietveld CL happens to + // also be a Gerrit CL, render a disambiguation HTML + // page with two links instead. We'll need to make an + // RPC (to maintner?) to figure that out. For now just + // redirect to rietveld. target = "https://codereview.appspot.com/" + id } else { target = "https://go-review.googlesource.com/" + id diff --git a/godoc/redirect/redirect_test.go b/godoc/redirect/redirect_test.go index a242f4fa..804bfb00 100644 --- a/godoc/redirect/redirect_test.go +++ b/godoc/redirect/redirect_test.go @@ -62,6 +62,15 @@ func TestRedirects(t *testing.T) { "/cl/1/": {302, "https://go-review.googlesource.com/1"}, "/cl/267120043": {302, "https://codereview.appspot.com/267120043"}, "/cl/267120043/": {302, "https://codereview.appspot.com/267120043"}, + + // Verify that we're using the Rietveld CL table: + "/cl/152046": {302, "https://codereview.appspot.com/152046"}, + "/cl/152047": {302, "https://go-review.googlesource.com/152047"}, + "/cl/152048": {302, "https://codereview.appspot.com/152048"}, + + // And verify we're using the the "bigEnoughAssumeRietveld" value: + "/cl/299999": {302, "https://go-review.googlesource.com/299999"}, + "/cl/300000": {302, "https://codereview.appspot.com/300000"}, } mux := http.NewServeMux() diff --git a/godoc/redirect/rietveld.go b/godoc/redirect/rietveld.go new file mode 100644 index 00000000..81b1094d --- /dev/null +++ b/godoc/redirect/rietveld.go @@ -0,0 +1,1093 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package redirect + +// bigEnoughAssumeRietveld is the value where CLs equal or great are +// assumed to be on Rietveld. By including this threshold we shrink +// the size of the table below. When Go amasses 150,000 more CLs, we'll +// need to bump this number and regenerate the list below. +const bigEnoughAssumeRietveld = 300000 + +// isRietveldCL reports whether cl was a Rietveld CL number. +func isRietveldCL(cl int) bool { + return cl >= bigEnoughAssumeRietveld || lowRietveldCL[cl] +} + +// lowRietveldCLs are the old CL numbers assigned by Rietveld code +// review system as used by Go prior to Gerrit which are less than +// bigEnoughAssumeRietveld. +// +// This list of numbers is registered with the /cl/NNNN redirect +// handler to disambiguate which code review system a particular +// number corresponds to. In some rare cases there may be duplicates, +// in which case we might render an HTML choice for the user. +// +// To re-generate this list, run: +// +// $ cd $GOROOT +// $ git log 7d7c6a9..94151eb | grep "^ https://golang.org/cl/" | perl -ne 's,^\s+https://golang.org/cl/(\d+).*$,$1,; chomp; print "$_: true,\n" if $_ < 300000' | sort -n | uniq +// +// Note that we ignore the x/* repos because we didn't start using +// "subrepos" until the Rietveld CLs numbers were already 4,000,000+, +// well above bigEnoughAssumeRietveld. +var lowRietveldCL = map[int]bool{ + 152046: true, + 152048: true, + 152049: true, + 152050: true, + 152051: true, + 152052: true, + 152055: true, + 152056: true, + 152057: true, + 152072: true, + 152073: true, + 152075: true, + 152076: true, + 152077: true, + 152078: true, + 152079: true, + 152080: true, + 152082: true, + 152084: true, + 152085: true, + 152086: true, + 152088: true, + 152089: true, + 152091: true, + 152098: true, + 152101: true, + 152102: true, + 152105: true, + 152106: true, + 152107: true, + 152108: true, + 152109: true, + 152110: true, + 152114: true, + 152117: true, + 152118: true, + 152120: true, + 152123: true, + 152124: true, + 152128: true, + 152130: true, + 152131: true, + 152138: true, + 152141: true, + 152142: true, + 153048: true, + 153049: true, + 153050: true, + 153051: true, + 153055: true, + 153056: true, + 153057: true, + 154043: true, + 154044: true, + 154045: true, + 154049: true, + 154055: true, + 154057: true, + 154058: true, + 154059: true, + 154061: true, + 154064: true, + 154065: true, + 154067: true, + 154068: true, + 154069: true, + 154071: true, + 154072: true, + 154073: true, + 154076: true, + 154079: true, + 154096: true, + 154097: true, + 154099: true, + 154100: true, + 154101: true, + 154102: true, + 154108: true, + 154118: true, + 154121: true, + 154122: true, + 154123: true, + 154125: true, + 154126: true, + 154128: true, + 154136: true, + 154138: true, + 154139: true, + 154140: true, + 154141: true, + 154142: true, + 154143: true, + 154144: true, + 154145: true, + 154146: true, + 154152: true, + 154153: true, + 154156: true, + 154159: true, + 154161: true, + 154166: true, + 154167: true, + 154169: true, + 154171: true, + 154172: true, + 154173: true, + 154174: true, + 154175: true, + 154176: true, + 154177: true, + 154178: true, + 154179: true, + 154180: true, + 155041: true, + 155042: true, + 155045: true, + 155047: true, + 155048: true, + 155049: true, + 155050: true, + 155054: true, + 155055: true, + 155056: true, + 155057: true, + 155058: true, + 155059: true, + 155061: true, + 155062: true, + 155063: true, + 155065: true, + 155067: true, + 155069: true, + 155072: true, + 155074: true, + 155075: true, + 155077: true, + 155078: true, + 155079: true, + 156041: true, + 156044: true, + 156045: true, + 156046: true, + 156047: true, + 156051: true, + 156052: true, + 156054: true, + 156055: true, + 156056: true, + 156058: true, + 156059: true, + 156060: true, + 156061: true, + 156062: true, + 156063: true, + 156066: true, + 156067: true, + 156070: true, + 156071: true, + 156073: true, + 156075: true, + 156077: true, + 156079: true, + 156080: true, + 156081: true, + 156083: true, + 156084: true, + 156085: true, + 156086: true, + 156089: true, + 156091: true, + 156092: true, + 156093: true, + 156094: true, + 156097: true, + 156099: true, + 156100: true, + 156102: true, + 156103: true, + 156104: true, + 156106: true, + 156107: true, + 156108: true, + 156109: true, + 156110: true, + 156113: true, + 156115: true, + 156116: true, + 157041: true, + 157042: true, + 157043: true, + 157044: true, + 157046: true, + 157053: true, + 157055: true, + 157056: true, + 157058: true, + 157060: true, + 157061: true, + 157062: true, + 157065: true, + 157066: true, + 157067: true, + 157068: true, + 157069: true, + 157071: true, + 157072: true, + 157073: true, + 157074: true, + 157075: true, + 157076: true, + 157077: true, + 157082: true, + 157084: true, + 157085: true, + 157087: true, + 157088: true, + 157091: true, + 157095: true, + 157096: true, + 157099: true, + 157100: true, + 157101: true, + 157102: true, + 157103: true, + 157104: true, + 157106: true, + 157110: true, + 157111: true, + 157112: true, + 157114: true, + 157116: true, + 157119: true, + 157140: true, + 157142: true, + 157143: true, + 157144: true, + 157146: true, + 157147: true, + 157149: true, + 157151: true, + 157152: true, + 157153: true, + 157154: true, + 157156: true, + 157157: true, + 157158: true, + 157159: true, + 157160: true, + 157162: true, + 157166: true, + 157167: true, + 157168: true, + 157170: true, + 158041: true, + 159044: true, + 159049: true, + 159050: true, + 159051: true, + 160043: true, + 160044: true, + 160045: true, + 160046: true, + 160047: true, + 160054: true, + 160056: true, + 160057: true, + 160059: true, + 160060: true, + 160061: true, + 160064: true, + 160065: true, + 160069: true, + 160070: true, + 161049: true, + 161050: true, + 161056: true, + 161058: true, + 161060: true, + 161061: true, + 161069: true, + 161070: true, + 161073: true, + 161075: true, + 162041: true, + 162044: true, + 162046: true, + 162053: true, + 162054: true, + 162055: true, + 162056: true, + 162057: true, + 162058: true, + 162059: true, + 162061: true, + 162062: true, + 163042: true, + 163044: true, + 163049: true, + 163050: true, + 163051: true, + 163052: true, + 163053: true, + 163055: true, + 163058: true, + 163061: true, + 163062: true, + 163064: true, + 163067: true, + 163068: true, + 163069: true, + 163070: true, + 163071: true, + 163072: true, + 163082: true, + 163083: true, + 163085: true, + 163088: true, + 163091: true, + 163092: true, + 163097: true, + 163098: true, + 164043: true, + 164047: true, + 164049: true, + 164052: true, + 164053: true, + 164056: true, + 164059: true, + 164060: true, + 164062: true, + 164068: true, + 164069: true, + 164071: true, + 164073: true, + 164074: true, + 164075: true, + 164078: true, + 164079: true, + 164081: true, + 164082: true, + 164083: true, + 164085: true, + 164086: true, + 164088: true, + 164090: true, + 164091: true, + 164092: true, + 164093: true, + 164094: true, + 164095: true, + 165042: true, + 165044: true, + 165045: true, + 165048: true, + 165049: true, + 165050: true, + 165051: true, + 165055: true, + 165057: true, + 165058: true, + 165059: true, + 165061: true, + 165062: true, + 165063: true, + 165064: true, + 165065: true, + 165068: true, + 165070: true, + 165076: true, + 165078: true, + 165080: true, + 165083: true, + 165086: true, + 165097: true, + 165100: true, + 165101: true, + 166041: true, + 166043: true, + 166044: true, + 166047: true, + 166049: true, + 166052: true, + 166053: true, + 166055: true, + 166058: true, + 166059: true, + 166060: true, + 166064: true, + 166066: true, + 166067: true, + 166068: true, + 166070: true, + 166071: true, + 166072: true, + 166073: true, + 166074: true, + 166076: true, + 166077: true, + 166078: true, + 166080: true, + 167043: true, + 167044: true, + 167047: true, + 167050: true, + 167055: true, + 167057: true, + 167058: true, + 168041: true, + 168045: true, + 170042: true, + 170043: true, + 170044: true, + 170046: true, + 170047: true, + 170048: true, + 170049: true, + 171044: true, + 171046: true, + 171047: true, + 171048: true, + 171051: true, + 172041: true, + 172042: true, + 172043: true, + 172045: true, + 172049: true, + 173041: true, + 173044: true, + 173045: true, + 174042: true, + 174047: true, + 174048: true, + 174050: true, + 174051: true, + 174052: true, + 174053: true, + 174063: true, + 174064: true, + 174072: true, + 174076: true, + 174077: true, + 174078: true, + 174082: true, + 174083: true, + 174087: true, + 175045: true, + 175046: true, + 175047: true, + 175048: true, + 176056: true, + 176057: true, + 176058: true, + 176061: true, + 176062: true, + 176063: true, + 176064: true, + 176066: true, + 176067: true, + 176070: true, + 176071: true, + 176076: true, + 178043: true, + 178044: true, + 178046: true, + 178048: true, + 179047: true, + 179055: true, + 179061: true, + 179062: true, + 179063: true, + 179067: true, + 179069: true, + 179070: true, + 179072: true, + 179079: true, + 179088: true, + 179095: true, + 179096: true, + 179097: true, + 179099: true, + 179105: true, + 179106: true, + 179108: true, + 179118: true, + 179120: true, + 179125: true, + 179126: true, + 179128: true, + 179129: true, + 179130: true, + 180044: true, + 180045: true, + 180046: true, + 180047: true, + 180048: true, + 180049: true, + 180050: true, + 180052: true, + 180053: true, + 180054: true, + 180055: true, + 180056: true, + 180057: true, + 180059: true, + 180061: true, + 180064: true, + 180065: true, + 180068: true, + 180069: true, + 180070: true, + 180074: true, + 180075: true, + 180081: true, + 180082: true, + 180085: true, + 180092: true, + 180099: true, + 180105: true, + 180108: true, + 180112: true, + 180118: true, + 181041: true, + 181043: true, + 181044: true, + 181045: true, + 181049: true, + 181050: true, + 181055: true, + 181057: true, + 181058: true, + 181059: true, + 181063: true, + 181071: true, + 181073: true, + 181075: true, + 181077: true, + 181080: true, + 181083: true, + 181084: true, + 181085: true, + 181086: true, + 181087: true, + 181089: true, + 181097: true, + 181099: true, + 181102: true, + 181111: true, + 181130: true, + 181135: true, + 181137: true, + 181138: true, + 181139: true, + 181151: true, + 181152: true, + 181153: true, + 181155: true, + 181156: true, + 181157: true, + 181158: true, + 181160: true, + 181161: true, + 181163: true, + 181164: true, + 181171: true, + 181179: true, + 181183: true, + 181184: true, + 181186: true, + 182041: true, + 182043: true, + 182044: true, + 183042: true, + 183043: true, + 183044: true, + 183047: true, + 183049: true, + 183065: true, + 183066: true, + 183073: true, + 183074: true, + 183075: true, + 183083: true, + 183084: true, + 183087: true, + 183088: true, + 183090: true, + 183095: true, + 183104: true, + 183107: true, + 183109: true, + 183111: true, + 183112: true, + 183113: true, + 183116: true, + 183123: true, + 183124: true, + 183125: true, + 183126: true, + 183132: true, + 183133: true, + 183135: true, + 183136: true, + 183137: true, + 183138: true, + 183139: true, + 183140: true, + 183141: true, + 183142: true, + 183153: true, + 183155: true, + 183156: true, + 183157: true, + 183160: true, + 184043: true, + 184055: true, + 184058: true, + 184059: true, + 184068: true, + 184069: true, + 184079: true, + 184080: true, + 184081: true, + 185043: true, + 185045: true, + 186042: true, + 186043: true, + 186073: true, + 186076: true, + 186077: true, + 186078: true, + 186079: true, + 186081: true, + 186095: true, + 186108: true, + 186113: true, + 186115: true, + 186116: true, + 186118: true, + 186119: true, + 186132: true, + 186137: true, + 186138: true, + 186139: true, + 186143: true, + 186144: true, + 186145: true, + 186146: true, + 186147: true, + 186148: true, + 186159: true, + 186160: true, + 186161: true, + 186165: true, + 186169: true, + 186173: true, + 186180: true, + 186210: true, + 186211: true, + 186212: true, + 186213: true, + 186214: true, + 186215: true, + 186216: true, + 186228: true, + 186229: true, + 186230: true, + 186232: true, + 186234: true, + 186255: true, + 186263: true, + 186276: true, + 186279: true, + 186282: true, + 186283: true, + 188043: true, + 189042: true, + 189057: true, + 189059: true, + 189062: true, + 189078: true, + 189080: true, + 189083: true, + 189088: true, + 189093: true, + 189095: true, + 189096: true, + 189098: true, + 189100: true, + 190041: true, + 190042: true, + 190043: true, + 190044: true, + 190059: true, + 190062: true, + 190068: true, + 190074: true, + 190076: true, + 190077: true, + 190079: true, + 190085: true, + 190088: true, + 190103: true, + 190104: true, + 193055: true, + 193066: true, + 193067: true, + 193070: true, + 193075: true, + 193079: true, + 193080: true, + 193081: true, + 193091: true, + 193092: true, + 193095: true, + 193101: true, + 193104: true, + 194043: true, + 194045: true, + 194046: true, + 194050: true, + 194051: true, + 194052: true, + 194053: true, + 194064: true, + 194066: true, + 194069: true, + 194071: true, + 194072: true, + 194073: true, + 194074: true, + 194076: true, + 194077: true, + 194078: true, + 194082: true, + 194084: true, + 194085: true, + 194090: true, + 194091: true, + 194092: true, + 194094: true, + 194097: true, + 194098: true, + 194099: true, + 194100: true, + 194114: true, + 194116: true, + 194118: true, + 194119: true, + 194120: true, + 194121: true, + 194122: true, + 194126: true, + 194129: true, + 194131: true, + 194132: true, + 194133: true, + 194134: true, + 194146: true, + 194151: true, + 194156: true, + 194157: true, + 194159: true, + 194161: true, + 194165: true, + 195041: true, + 195044: true, + 195050: true, + 195051: true, + 195052: true, + 195068: true, + 195075: true, + 195076: true, + 195079: true, + 195080: true, + 195081: true, + 196042: true, + 196044: true, + 196050: true, + 196051: true, + 196055: true, + 196056: true, + 196061: true, + 196063: true, + 196065: true, + 196070: true, + 196071: true, + 196075: true, + 196077: true, + 196079: true, + 196087: true, + 196088: true, + 196090: true, + 196091: true, + 197041: true, + 197042: true, + 197043: true, + 197044: true, + 198044: true, + 198045: true, + 198046: true, + 198048: true, + 198049: true, + 198050: true, + 198053: true, + 198057: true, + 198058: true, + 198066: true, + 198071: true, + 198074: true, + 198081: true, + 198084: true, + 198085: true, + 198102: true, + 199042: true, + 199044: true, + 199045: true, + 199046: true, + 199047: true, + 199052: true, + 199054: true, + 199057: true, + 199066: true, + 199070: true, + 199082: true, + 199091: true, + 199094: true, + 199096: true, + 201041: true, + 201042: true, + 201043: true, + 201047: true, + 201048: true, + 201049: true, + 201058: true, + 201061: true, + 201064: true, + 201065: true, + 201068: true, + 202042: true, + 202043: true, + 202044: true, + 202051: true, + 202054: true, + 202055: true, + 203043: true, + 203050: true, + 203051: true, + 203053: true, + 203060: true, + 203062: true, + 204042: true, + 204044: true, + 204048: true, + 204052: true, + 204053: true, + 204061: true, + 204062: true, + 204064: true, + 204065: true, + 204067: true, + 204068: true, + 204069: true, + 205042: true, + 205044: true, + 206043: true, + 206044: true, + 206047: true, + 206050: true, + 206051: true, + 206052: true, + 206053: true, + 206054: true, + 206055: true, + 206058: true, + 206059: true, + 206060: true, + 206067: true, + 206069: true, + 206077: true, + 206078: true, + 206079: true, + 206084: true, + 206089: true, + 206101: true, + 206107: true, + 206109: true, + 207043: true, + 207044: true, + 207049: true, + 207050: true, + 207051: true, + 207052: true, + 207053: true, + 207054: true, + 207055: true, + 207061: true, + 207062: true, + 207069: true, + 207071: true, + 207085: true, + 207086: true, + 207087: true, + 207088: true, + 207095: true, + 207096: true, + 207102: true, + 207103: true, + 207106: true, + 207108: true, + 207110: true, + 207111: true, + 207112: true, + 209041: true, + 209042: true, + 209043: true, + 209044: true, + 210042: true, + 210043: true, + 210044: true, + 210047: true, + 211041: true, + 212041: true, + 212045: true, + 212046: true, + 212047: true, + 213041: true, + 213042: true, + 214042: true, + 214046: true, + 214049: true, + 214050: true, + 215042: true, + 215048: true, + 215050: true, + 216043: true, + 216046: true, + 216047: true, + 216052: true, + 216053: true, + 216054: true, + 216059: true, + 216068: true, + 217041: true, + 217044: true, + 217047: true, + 217048: true, + 217049: true, + 217056: true, + 217058: true, + 217059: true, + 217060: true, + 217061: true, + 217064: true, + 217066: true, + 217069: true, + 217071: true, + 217085: true, + 217086: true, + 217088: true, + 217093: true, + 217094: true, + 217108: true, + 217109: true, + 217111: true, + 217115: true, + 217116: true, + 218042: true, + 218044: true, + 218046: true, + 218050: true, + 218060: true, + 218061: true, + 218063: true, + 218064: true, + 218065: true, + 218070: true, + 218071: true, + 218072: true, + 218074: true, + 218076: true, + 222041: true, + 223041: true, + 223043: true, + 223044: true, + 223050: true, + 223052: true, + 223054: true, + 223058: true, + 223059: true, + 223061: true, + 223068: true, + 223069: true, + 223070: true, + 223071: true, + 223073: true, + 223075: true, + 223076: true, + 223083: true, + 223087: true, + 223094: true, + 223096: true, + 223101: true, + 223106: true, + 223108: true, + 224041: true, + 224042: true, + 224043: true, + 224045: true, + 224051: true, + 224053: true, + 224057: true, + 224060: true, + 224061: true, + 224062: true, + 224063: true, + 224068: true, + 224069: true, + 224081: true, + 224084: true, + 224087: true, + 224090: true, + 224096: true, + 224105: true, + 225042: true, + 227041: true, + 229045: true, + 229046: true, + 229048: true, + 229049: true, + 229050: true, + 231042: true, + 236041: true, + 237041: true, + 238041: true, + 238042: true, + 240041: true, + 240042: true, + 240043: true, + 241041: true, + 243041: true, + 244041: true, + 245041: true, + 247041: true, + 250041: true, + 252041: true, + 253041: true, + 253045: true, + 254043: true, + 255042: true, + 255043: true, + 257041: true, + 257042: true, + 258041: true, + 261041: true, + 264041: true, + 294042: true, + 296042: true, +}