From dab65e92bb1ebf10935a79012ba4cef60b2de040 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Fri, 16 Nov 2018 18:45:48 +0000 Subject: [PATCH] [release-branch.go1.11] godoc/redirect: improve Rietveld CL heuristic Go's CL numbers as assigned by Gerrit have started to collide with the lower numbers in the sparse set of CL numbers as returned by our old code review system (Rietveld). The old heuristic no longer works now that Gerrit CL numbers have reached 150000. Instead, include a map of the low Rietveld CL numbers where we might overlap and bump the threshold heuristic up. Updates golang/go#28836 Change-Id: Ice719ab807ce3922b885a800ac873cdbf165a8f7 Reviewed-on: https://go-review.googlesource.com/c/150057 Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot Reviewed-by: Bryan C. Mills Reviewed-by: Dmitri Shuralyov (cherry picked from commit e77c06808af6317101c5a7124008b3f7e0103768) Reviewed-on: https://go-review.googlesource.com/c/150577 --- godoc/redirect/redirect.go | 12 +- godoc/redirect/redirect_test.go | 9 + godoc/redirect/rietveld.go | 1093 +++++++++++++++++++++++++++++++ 3 files changed, 1110 insertions(+), 4 deletions(-) create mode 100644 godoc/redirect/rietveld.go diff --git a/godoc/redirect/redirect.go b/godoc/redirect/redirect.go index 3bec53378e9..8208518c180 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 a242f4fa78d..804bfb00d5c 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 00000000000..81b1094db17 --- /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, +}