Unify debug launch configs and auto-detect browser
Use the same permutation selector applied by the server at runtime to automatically detect the browser making the request and build/refresh that UI permutation. Change-Id: I31603a80e23a8e4e2c46325be4dac808d8f98a5c
This commit is contained in:
parent
ab2319061d
commit
cda2121828
@ -37,7 +37,7 @@ Running the Daemon
|
|||||||
Duplicate the existing launch configuration:
|
Duplicate the existing launch configuration:
|
||||||
|
|
||||||
* Run -> Debug Configurations ...
|
* Run -> Debug Configurations ...
|
||||||
* Java Application -> `buck_daemon_ui_*`
|
* Java Application -> `gerrit_daemon`
|
||||||
* Right click, Duplicate
|
* Right click, Duplicate
|
||||||
|
|
||||||
* Modify the name to be unique.
|
* Modify the name to be unique.
|
||||||
|
@ -90,6 +90,7 @@ java_library2(
|
|||||||
'//gerrit-cache-h2:cache-h2',
|
'//gerrit-cache-h2:cache-h2',
|
||||||
'//gerrit-common:server',
|
'//gerrit-common:server',
|
||||||
'//gerrit-extension-api:api',
|
'//gerrit-extension-api:api',
|
||||||
|
'//gerrit-gwtexpui:linker_server',
|
||||||
'//gerrit-gwtexpui:server',
|
'//gerrit-gwtexpui:server',
|
||||||
'//gerrit-httpd:httpd',
|
'//gerrit-httpd:httpd',
|
||||||
'//gerrit-lucene:lucene',
|
'//gerrit-lucene:lucene',
|
||||||
|
@ -26,6 +26,7 @@ import com.google.gerrit.server.config.ConfigUtil;
|
|||||||
import com.google.gerrit.server.config.GerritServerConfig;
|
import com.google.gerrit.server.config.GerritServerConfig;
|
||||||
import com.google.gerrit.server.config.SitePaths;
|
import com.google.gerrit.server.config.SitePaths;
|
||||||
import com.google.gerrit.server.util.TimeUtil;
|
import com.google.gerrit.server.util.TimeUtil;
|
||||||
|
import com.google.gwtexpui.linker.server.UserAgentRule;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
@ -558,16 +559,13 @@ public class JettyServer {
|
|||||||
}
|
}
|
||||||
dir = dir.getParentFile(); // pop classes
|
dir = dir.getParentFile(); // pop classes
|
||||||
|
|
||||||
if ("buck-out".equals(dir.getName())) {
|
if (!"buck-out".equals(dir.getName())) {
|
||||||
final File dstwar = makeWarTempDir();
|
throw new FileNotFoundException("Cannot find web root from " + u);
|
||||||
String pkg = "gerrit-gwtui";
|
}
|
||||||
String target = targetForBrowser(System.getProperty("gerrit.browser"));
|
|
||||||
final File gen = new File(dir, "gen");
|
|
||||||
String out = new File(new File(gen, pkg), target).getAbsolutePath();
|
|
||||||
final File zip = new File(out + ".zip");
|
|
||||||
final File root = dir.getParentFile();
|
|
||||||
final String name = "//" + pkg + ":" + target;
|
|
||||||
|
|
||||||
|
final File gen = new File(dir, "gen");
|
||||||
|
final File root = dir.getParentFile();
|
||||||
|
final File dstwar = makeWarTempDir();
|
||||||
File ui = new File(dstwar, "gerrit_ui");
|
File ui = new File(dstwar, "gerrit_ui");
|
||||||
File p = new File(ui, "permutations");
|
File p = new File(ui, "permutations");
|
||||||
mkdir(ui);
|
mkdir(ui);
|
||||||
@ -575,43 +573,39 @@ public class JettyServer {
|
|||||||
p.deleteOnExit();
|
p.deleteOnExit();
|
||||||
|
|
||||||
app.addFilter(new FilterHolder(new Filter() {
|
app.addFilter(new FilterHolder(new Filter() {
|
||||||
private long last;
|
private final UserAgentRule rule = new UserAgentRule();
|
||||||
|
private String lastTarget;
|
||||||
|
private long lastTime;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doFilter(ServletRequest request, ServletResponse res,
|
public void doFilter(ServletRequest request, ServletResponse res,
|
||||||
FilterChain chain) throws IOException, ServletException {
|
FilterChain chain) throws IOException, ServletException {
|
||||||
HttpServletRequest req = (HttpServletRequest) request;
|
String pkg = "gerrit-gwtui";
|
||||||
build(root, gen, name);
|
String target = "ui_" + rule.select((HttpServletRequest) request);
|
||||||
if (last != zip.lastModified()) {
|
File zip = new File(new File(gen, pkg), target + ".zip");
|
||||||
last = zip.lastModified();
|
|
||||||
|
synchronized (this) {
|
||||||
|
build(root, gen, "//" + pkg + ":" + target);
|
||||||
|
|
||||||
|
if (!target.equals(lastTarget) || lastTime != zip.lastModified()) {
|
||||||
|
lastTarget = target;
|
||||||
|
lastTime = zip.lastModified();
|
||||||
unpack(zip, dstwar);
|
unpack(zip, dstwar);
|
||||||
}
|
}
|
||||||
chain.doFilter(req, res);
|
}
|
||||||
|
|
||||||
|
chain.doFilter(request, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(FilterConfig config) {
|
public void init(FilterConfig config) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void destroy() {
|
public void destroy() {
|
||||||
}
|
}
|
||||||
}), "/", EnumSet.of(DispatcherType.REQUEST));
|
}), "/", EnumSet.of(DispatcherType.REQUEST));
|
||||||
return Resource.newResource(dstwar.toURI());
|
return Resource.newResource(dstwar.toURI());
|
||||||
} else if ("target".equals(dir.getName())) {
|
|
||||||
return useMavenDeveloperBuild(dir);
|
|
||||||
} else {
|
|
||||||
throw new FileNotFoundException("Cannot find web root from " + u);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String targetForBrowser(String browser) {
|
|
||||||
if (browser == null || browser.isEmpty()) {
|
|
||||||
return "ui_dbg";
|
|
||||||
} else if (browser.startsWith("ui_")) {
|
|
||||||
return browser;
|
|
||||||
} else {
|
|
||||||
return "ui_" + browser;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void build(File root, File gen, String target)
|
private static void build(File root, File gen, String target)
|
||||||
@ -664,25 +658,4 @@ public class JettyServer {
|
|||||||
}
|
}
|
||||||
return properties;
|
return properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Resource useMavenDeveloperBuild(File dir) throws IOException {
|
|
||||||
dir = dir.getParentFile(); // pop target
|
|
||||||
dir = dir.getParentFile(); // pop the module we are in
|
|
||||||
|
|
||||||
// Drop down into gerrit-gwtui to find the WAR assets we need.
|
|
||||||
//
|
|
||||||
dir = new File(new File(dir, "gerrit-gwtui"), "target");
|
|
||||||
final File[] entries = dir.listFiles();
|
|
||||||
if (entries == null) {
|
|
||||||
throw new FileNotFoundException("No " + dir);
|
|
||||||
}
|
|
||||||
for (File e : entries) {
|
|
||||||
if (e.isDirectory() /* must be a directory */
|
|
||||||
&& e.getName().startsWith("gerrit-gwtui-")
|
|
||||||
&& new File(e, "gerrit_ui/gerrit_ui.nocache.js").isFile()) {
|
|
||||||
return Resource.newResource(e.toURI());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new FileNotFoundException("No " + dir + "/gerrit-gwtui-*");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
|
||||||
<listEntry value="/gerrit/gerrit-main/src/main/java/Main.java"/>
|
|
||||||
</listAttribute>
|
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
|
||||||
<listEntry value="1"/>
|
|
||||||
</listAttribute>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Main"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="daemon --console-log --show-stack-trace -d ${resource_loc:/gerrit}/../test_site"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dgerrit.browser=ui_dbg"/>
|
|
||||||
</launchConfiguration>
|
|
@ -1,13 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
|
||||||
<listEntry value="/gerrit/gerrit-main/src/main/java/Main.java"/>
|
|
||||||
</listAttribute>
|
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
|
||||||
<listEntry value="1"/>
|
|
||||||
</listAttribute>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Main"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="daemon --console-log --show-stack-trace -d ${resource_loc:/gerrit}/../test_site"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dgerrit.browser=ui_firefox"/>
|
|
||||||
</launchConfiguration>
|
|
@ -1,13 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
|
||||||
<listEntry value="/gerrit/gerrit-main/src/main/java/Main.java"/>
|
|
||||||
</listAttribute>
|
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
|
||||||
<listEntry value="1"/>
|
|
||||||
</listAttribute>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Main"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="daemon --console-log --show-stack-trace -d ${resource_loc:/gerrit}/../test_site"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dgerrit.browser=ui_ie9"/>
|
|
||||||
</launchConfiguration>
|
|
@ -1,13 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
|
||||||
<listEntry value="/gerrit/gerrit-main/src/main/java/Main.java"/>
|
|
||||||
</listAttribute>
|
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
|
||||||
<listEntry value="1"/>
|
|
||||||
</listAttribute>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Main"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="daemon --console-log --show-stack-trace -d ${resource_loc:/gerrit}/../test_site"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dgerrit.browser=ui_safari"/>
|
|
||||||
</launchConfiguration>
|
|
@ -9,8 +9,8 @@
|
|||||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||||
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
|
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
|
||||||
</listAttribute>
|
</listAttribute>
|
||||||
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Main"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Main"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="daemon --console-log --show-stack-trace -d ${resource_loc:/gerrit}/../test_site"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="daemon --console-log --show-stack-trace -d ${resource_loc:/gerrit}/../test_site"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dgerrit.browser=ui_chrome"/>
|
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
<listEntry value="/gerrit/buck-out/gen/lib/gwt/dev/gwt-dev-2.5.0.jar"/>
|
<listEntry value="/gerrit/buck-out/gen/lib/gwt/dev/gwt-dev-2.5.1.jar"/>
|
||||||
</listAttribute>
|
</listAttribute>
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
<listEntry value="1"/>
|
<listEntry value="1"/>
|
||||||
@ -9,6 +9,7 @@
|
|||||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||||
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
|
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
|
||||||
</listAttribute>
|
</listAttribute>
|
||||||
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-startupUrl / -war ${resource_loc:/gerrit}/buck-out/gen/gerrit-gwtui/ui_dbg__tmp/war -server com.google.gerrit.gwtdebug.GerritDebugLauncher com.google.gerrit.GerritGwtUI"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-startupUrl / -war ${resource_loc:/gerrit}/buck-out/gen/gerrit-gwtui/ui_dbg__tmp/war -server com.google.gerrit.gwtdebug.GerritDebugLauncher com.google.gerrit.GerritGwtUI"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="gerrit"/>
|
Loading…
Reference in New Issue
Block a user