1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 package org.eclipse.jgit.junit.http;
45
46 import java.net.URI;
47 import java.net.URISyntaxException;
48
49 import javax.servlet.http.HttpServletRequest;
50
51 import org.eclipse.jetty.servlet.ServletContextHandler;
52 import org.eclipse.jetty.servlet.ServletHolder;
53 import org.eclipse.jgit.errors.RepositoryNotFoundException;
54 import org.eclipse.jgit.http.server.GitServlet;
55 import org.eclipse.jgit.lib.Repository;
56 import org.eclipse.jgit.transport.URIish;
57 import org.eclipse.jgit.transport.resolver.RepositoryResolver;
58 import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
59
60
61
62
63
64 public class SimpleHttpServer {
65
66 AppServer server;
67
68 private final Repository db;
69
70 private URIish uri;
71
72 public SimpleHttpServer(Repository repository) {
73 this.db = repository;
74 server = new AppServer();
75 }
76
77 public void start() throws Exception {
78 ServletContextHandler sBasic = server.authBasic(smart("/sbasic"));
79 server.setUp();
80 final String srcName = db.getDirectory().getName();
81 uri = toURIish(sBasic, srcName);
82 }
83
84 public void stop() throws Exception {
85 server.tearDown();
86 }
87
88 public URIish getUri() {
89 return uri;
90 }
91
92 private ServletContextHandler smart(final String path) {
93 GitServlet gs = new GitServlet();
94 gs.setRepositoryResolver(new RepositoryResolver<HttpServletRequest>() {
95 public Repository open(HttpServletRequest req, String name)
96 throws RepositoryNotFoundException,
97 ServiceNotEnabledException {
98 if (!name.equals(nameOf(db)))
99 throw new RepositoryNotFoundException(name);
100
101 db.incrementOpen();
102 return db;
103 }
104 });
105
106 ServletContextHandler ctx = server.addContext(path);
107 ctx.addServlet(new ServletHolder(gs), "/*");
108 return ctx;
109 }
110
111 private static String nameOf(final Repository db) {
112 return db.getDirectory().getName();
113 }
114
115 private URIish toURIish(String path) throws URISyntaxException {
116 URI u = server.getURI().resolve(path);
117 return new URIish(u.toString());
118 }
119
120 private URIish toURIish(ServletContextHandler app, String name)
121 throws URISyntaxException {
122 String p = app.getContextPath();
123 if (!p.endsWith("/") && !name.startsWith("/"))
124 p += "/";
125 p += name;
126 return toURIish(p);
127 }
128 }