web: always enable print mode
Use default print if external browsing is not available.
Change-Id: Ib3b0e64e8a9835491995de4d1b4b42eb74d19cd4
diff --git a/web/e2e_test.go b/web/e2e_test.go
index 1c377cf..9ce8702 100644
--- a/web/e2e_test.go
+++ b/web/e2e_test.go
@@ -118,30 +118,8 @@
`value=magic`,
},
} {
- res, err := http.Get(ts.URL + req)
- if err != nil {
- t.Fatal(err)
- }
- resultBytes, err := ioutil.ReadAll(res.Body)
- res.Body.Close()
- if err != nil {
- log.Fatal(err)
- }
-
- result := string(resultBytes)
- for _, want := range needles {
- if !strings.Contains(result, want) {
- t.Errorf("query %q: result did not have %q: %s", req, want, result)
- }
- }
- if notWant := "crashed"; strings.Contains(result, notWant) {
- t.Errorf("result has %q: %s", notWant, result)
- }
- if notWant := "bytes skipped)..."; strings.Contains(result, notWant) {
- t.Errorf("result has %q: %s", notWant, result)
- }
+ checkNeedles(t, ts, req, needles)
}
-
}
func TestPrint(t *testing.T) {
@@ -193,28 +171,72 @@
`pre id="l1" class="inline-pre"><span class="noselect"><a href="#l1">`,
},
} {
- res, err := http.Get(ts.URL + req)
- if err != nil {
- t.Fatal(err)
- }
- resultBytes, err := ioutil.ReadAll(res.Body)
- res.Body.Close()
- if err != nil {
- log.Fatal(err)
- }
+ checkNeedles(t, ts, req, needles)
+ }
+}
- result := string(resultBytes)
- for _, want := range needles {
- if !strings.Contains(result, want) {
- t.Errorf("query %q: result did not have %q: %s", req, want, result)
- }
+func TestPrintDefault(t *testing.T) {
+ b, err := zoekt.NewIndexBuilder(&zoekt.Repository{
+ Name: "name",
+ URL: "repo-url",
+ Branches: []zoekt.RepositoryBranch{{Name: "master", Version: "1234"}},
+ })
+ if err != nil {
+ t.Fatalf("NewIndexBuilder: %v", err)
+ }
+ if err := b.Add(zoekt.Document{
+ Name: "f2",
+ Content: []byte("to carry water in the no later bla"),
+ Branches: []string{"master"},
+ }); err != nil {
+ t.Fatalf("Add: %v", err)
+ }
+ s := searcherForTest(t, b)
+ srv := Server{
+ Searcher: s,
+ Top: Top,
+ HTML: true,
+ }
+
+ mux, err := NewMux(&srv)
+ if err != nil {
+ t.Fatalf("NewMux: %v", err)
+ }
+
+ ts := httptest.NewServer(mux)
+ defer ts.Close()
+
+ for req, needles := range map[string][]string{
+ "/search?q=water": []string{
+ `href="print?`,
+ },
+ } {
+ checkNeedles(t, ts, req, needles)
+ }
+}
+
+func checkNeedles(t *testing.T, ts *httptest.Server, req string, needles []string) {
+ res, err := http.Get(ts.URL + req)
+ if err != nil {
+ t.Fatal(err)
+ }
+ resultBytes, err := ioutil.ReadAll(res.Body)
+ res.Body.Close()
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ result := string(resultBytes)
+ for _, want := range needles {
+ if !strings.Contains(result, want) {
+ t.Errorf("query %q: result did not have %q: %s", req, want, result)
}
- if notWant := "crashed"; strings.Contains(result, notWant) {
- t.Errorf("result has %q: %s", notWant, result)
- }
- if notWant := "bytes skipped)..."; strings.Contains(result, notWant) {
- t.Errorf("result has %q: %s", notWant, result)
- }
+ }
+ if notWant := "crashed"; strings.Contains(result, notWant) {
+ t.Errorf("result has %q: %s", notWant, result)
+ }
+ if notWant := "bytes skipped)..."; strings.Contains(result, notWant) {
+ t.Errorf("result has %q: %s", notWant, result)
}
}
diff --git a/web/server.go b/web/server.go
index 7afb497..f0f7272 100644
--- a/web/server.go
+++ b/web/server.go
@@ -163,10 +163,9 @@
mux.HandleFunc("/search", s.serveSearch)
mux.HandleFunc("/", s.serveSearchBox)
mux.HandleFunc("/about", s.serveAbout)
- }
- if s.Print {
mux.HandleFunc("/print", s.servePrint)
}
+
return mux, nil
}
@@ -195,7 +194,6 @@
return fmt.Errorf("no query found")
}
- log.Printf("got query %q", queryStr)
q, err := query.Parse(queryStr)
if err != nil {
return err
@@ -480,10 +478,6 @@
}
func (s *Server) servePrintErr(w http.ResponseWriter, r *http.Request) error {
- if !s.Print {
- return fmt.Errorf("no printing template defined.")
- }
-
qvals := r.URL.Query()
fileStr := qvals.Get("f")
repoStr := qvals.Get("r")
diff --git a/web/snippets.go b/web/snippets.go
index 9223c66..1b6112e 100644
--- a/web/snippets.go
+++ b/web/snippets.go
@@ -32,30 +32,35 @@
fragmentMap := map[string]*template.Template{}
if !localPrint {
for repo, str := range result.RepoURLs {
- templateMap[repo] = s.getTemplate(str)
+ if str != "" {
+ templateMap[repo] = s.getTemplate(str)
+ }
}
for repo, str := range result.LineFragments {
- fragmentMap[repo] = s.getTemplate(str)
+ if str != "" {
+ fragmentMap[repo] = s.getTemplate(str)
+ }
}
}
getFragment := func(repo string, linenum int) string {
- if localPrint {
+ tpl := fragmentMap[repo]
+
+ if tpl == nil || localPrint {
return "#l" + strconv.Itoa(linenum)
}
- if tpl := fragmentMap[repo]; tpl != nil {
- var buf bytes.Buffer
- if err := tpl.Execute(&buf, map[string]string{
- "LineNumber": strconv.Itoa(linenum),
- }); err != nil {
- log.Printf("fragment template: %v", err)
- return ""
- }
- return buf.String()
+
+ var buf bytes.Buffer
+ if err := tpl.Execute(&buf, map[string]string{
+ "LineNumber": strconv.Itoa(linenum),
+ }); err != nil {
+ log.Printf("fragment template: %v", err)
+ return ""
}
- return ""
+ return buf.String()
}
getURL := func(repo, filename string, branches []string, version string) string {
- if localPrint {
+ tpl := templateMap[repo]
+ if localPrint || tpl == nil {
v := make(url.Values)
v.Add("r", repo)
v.Add("f", filename)
@@ -66,24 +71,21 @@
return "print?" + v.Encode()
}
- if tpl := templateMap[repo]; tpl != nil {
- var buf bytes.Buffer
- b := ""
- if len(branches) > 0 {
- b = branches[0]
- }
- err := tpl.Execute(&buf, map[string]string{
- "Branch": b,
- "Version": version,
- "Path": filename,
- })
- if err != nil {
- log.Printf("url template: %v", err)
- return ""
- }
- return buf.String()
+ var buf bytes.Buffer
+ b := ""
+ if len(branches) > 0 {
+ b = branches[0]
}
- return ""
+ err := tpl.Execute(&buf, map[string]string{
+ "Branch": b,
+ "Version": version,
+ "Path": filename,
+ })
+ if err != nil {
+ log.Printf("url template: %v", err)
+ return ""
+ }
+ return buf.String()
}
// hash => result-id