diff options
| author | Andrew Niefer | 2011-04-19 17:13:17 +0000 |
|---|---|---|
| committer | Chris Aniszczyk | 2011-04-19 19:19:46 +0000 |
| commit | ddaaa0ae4cdda0b331c1186800ce7cb1b8a603bb (patch) | |
| tree | b4f2aa643ae31db473e382bcfe141e9f06ac4321 | |
| parent | 8dd8a2fe56b6fe145c29b62caa612afea5e02634 (diff) | |
| download | egit-pde-ddaaa0ae4cdda0b331c1186800ce7cb1b8a603bb.tar.gz egit-pde-ddaaa0ae4cdda0b331c1186800ce7cb1b8a603bb.tar.xz egit-pde-ddaaa0ae4cdda0b331c1186800ce7cb1b8a603bb.zip | |
Fix map file parsing, we are only interested in GIT entries
Bug: 328745
Change-Id: Ic49997072ffc94cb056ba8b9ff7b99afff15bf7a
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
3 files changed, 86 insertions, 74 deletions
diff --git a/org.eclipse.egit.relengtools/src/org/eclipse/egit/internal/relengtools/GetBugsOperation.java b/org.eclipse.egit.relengtools/src/org/eclipse/egit/internal/relengtools/GetBugsOperation.java index 1b41e9b..a1dc122 100755 --- a/org.eclipse.egit.relengtools/src/org/eclipse/egit/internal/relengtools/GetBugsOperation.java +++ b/org.eclipse.egit.relengtools/src/org/eclipse/egit/internal/relengtools/GetBugsOperation.java @@ -17,7 +17,6 @@ import java.lang.reflect.InvocationTargetException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; -import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.TreeMap; @@ -31,7 +30,12 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.egit.core.GitTag; +import org.eclipse.egit.core.project.RepositoryMapping; import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.LogCommand; +import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.ui.statushandlers.StatusManager; public class GetBugsOperation { @@ -74,13 +78,26 @@ public class GetBugsOperation { monitor.beginTask( Messages.getString("GetBugsOperation.0"), totalWork); //$NON-NLS-1$ - // task 1 -- get bug number from comments - final Set bugTree = new HashSet(); + final IProject[] selectedProjects = wizard + .getSelectedProjects(); + + // task 1 -- get bug numbers from comments + Set<Integer> bugTree; + try { + bugTree = getBugNumbersFromComments( + selectedProjects, + new SubProgressMonitor( + monitor, + 85, + SubProgressMonitor.SUPPRESS_SUBTASK_LABEL)); + } catch (final Exception e) { + monitor.done(); + return; + } // task 2 -- create map of bugs and summaries - final Integer[] bugs = (Integer[]) bugTree - .toArray(new Integer[0]); - final TreeMap map = (TreeMap) getBugzillaSummaries(bugs, + final Integer[] bugs = bugTree.toArray(new Integer[0]); + final Map<Integer, String> map = getBugzillaSummaries(bugs, new SubProgressMonitor(monitor, 15, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL)); page.getShell().getDisplay().asyncExec(new Runnable() { @@ -99,29 +116,45 @@ public class GetBugsOperation { } } - protected Set getBugNumbersFromComments(Object[] syncInfos, - IProgressMonitor monitor) { - monitor.beginTask("Scanning comments for bug numbers", syncInfos.length); - final TreeSet set = new TreeSet(); - for (int i = 0; i < syncInfos.length; i++) { - final Object info = syncInfos[i]; - getBugNumbersForSyncInfo(info, monitor, set); + protected Set<Integer> getBugNumbersFromComments(IProject[] projects, + IProgressMonitor monitor) throws Exception { + monitor.beginTask("Scanning comments for bug numbers", projects.length); + final Set<Integer> set = new TreeSet<Integer>(); + for (int i = 0; i < projects.length; i++) { + getBugNumbersForProject(projects[i], monitor, set); monitor.worked(1); } monitor.done(); return set; } - private void getBugNumbersForSyncInfo(Object info, - IProgressMonitor monitor, Set set) { + private void getBugNumbersForProject(IProject project, + IProgressMonitor monitor, Set<Integer> set) throws Exception { + final RepositoryMapping rm = RepositoryMapping.getMapping(project); + final Repository repository = rm.getRepository(); + + final RevCommit previousCommit = ShowInfoHandler.getCommitForTag( + repository, getProjectTag(project).getName()); + final RevCommit latestCommit = ShowInfoHandler.getLatestCommitFor(rm, + repository, project); + + final Git git = new Git(repository); + final LogCommand log = git.log(); + log.addRange(previousCommit, latestCommit); + for (final RevCommit commit : log.call()) { + findBugNumber(commit.getFullMessage(), set); + } } private GitTag getProjectTag(IProject project) { + final MapEntry mapEntry = wizard.getMapProject().getMapEntry(project); + if (mapEntry != null) + return mapEntry.getTag(); return MapEntry.DEFAULT; } - protected void findBugNumber(String comment, Set set) { + protected void findBugNumber(String comment, Set<Integer> set) { if (comment == null) { return; } @@ -136,14 +169,15 @@ public class GetBugsOperation { * Method uses set of bug numbers to query bugzilla and get summary of each * bug */ - protected Map getBugzillaSummaries(Integer[] bugs, IProgressMonitor monitor) { + protected Map<Integer, String> getBugzillaSummaries(Integer[] bugs, + IProgressMonitor monitor) { monitor.beginTask( Messages.getString("GetBugsOperation.1"), bugs.length + 1); //$NON-NLS-1$ HttpURLConnection hURL; DataInputStream in; URLConnection url; StringBuffer buffer; - final TreeMap map = new TreeMap(); + final TreeMap<Integer, String> map = new TreeMap<Integer, String>(); for (int i = 0; i < bugs.length; i++) { try { url = (new URL(BUG_DATABASE_PREFIX + bugs[i] diff --git a/org.eclipse.egit.relengtools/src/org/eclipse/egit/internal/relengtools/MapEntry.java b/org.eclipse.egit.relengtools/src/org/eclipse/egit/internal/relengtools/MapEntry.java index 6b3a590..bb7f67e 100755 --- a/org.eclipse.egit.relengtools/src/org/eclipse/egit/internal/relengtools/MapEntry.java +++ b/org.eclipse.egit.relengtools/src/org/eclipse/egit/internal/relengtools/MapEntry.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2010 IBM Corporation and others. + * Copyright (c) 2000, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -43,8 +43,6 @@ public class MapEntry { private OrderedMap arguments = new OrderedMap(); - private boolean legacy = false; - private String version; public static void main(String[] args) { @@ -136,6 +134,8 @@ public class MapEntry { final String[] args = getArrayFromStringWithBlank( entryLine.substring(end + 1), ","); this.arguments = populate(args); + if (this.arguments == null) + return; final String tag = (String) arguments.get(KEY_TAG); final String repo = (String) arguments.get(REPO); if (tag == null || tag.length() == 0 || repo == null @@ -145,43 +145,27 @@ public class MapEntry { } /* - * Build a table from the given array. In the new format,the array contains - * key=value elements. Otherwise we fill in the key based on the old format. + * Build a table from the given array. We only understand GIT map entries of + * the format "GIT,key=value[,key=value]* */ private OrderedMap populate(String[] entries) { + if (entries.length <= 1 || !"GIT".equalsIgnoreCase(entries[0])) { + // not a GIT entry, ignore + return null; + } + final OrderedMap result = new OrderedMap(); - for (int i = 0; i < entries.length; i++) { + for (int i = 1; i < entries.length; i++) { final String entry = entries[i]; final int index = entry.indexOf('='); if (index == -1) { - // we only handle CVS entries - if (i == 0 && "GIT".equalsIgnoreCase(entry)) - continue; - // legacy story... - return legacyPopulate(entries); + // bad entry + return null; } final String key = entry.substring(0, index); final String value = entry.substring(index + 1); result.put(key, value); } - result.toString(); - return result; - } - - private OrderedMap legacyPopulate(String[] entries) { - legacy = true; - final OrderedMap result = new OrderedMap(); - // must have at least tag and connect string - if (entries.length >= 2) { - // Version - result.put(KEY_TAG, entries[0]); - // Repo Connect String - result.put(REPO, entries[1]); - - // Optional CVS Module Name - if (entries.length >= 3) - result.put(KEY_PATH, entries[3]); - } return result; } @@ -263,22 +247,6 @@ public class MapEntry { public String getMapString() { final StringBuffer result = new StringBuffer(); - if (legacy) { - result.append(getType()); - result.append('@'); - result.append(getId()); - if (version != null) { - result.append(','); - result.append(version); - } - result.append('='); - result.append(getTagName()); - result.append(','); - result.append(getRepo()); - result.append(','); - result.append(getPath()); - return result.toString(); - } result.append(getType()); result.append('@'); result.append(getId()); diff --git a/org.eclipse.egit.relengtools/src/org/eclipse/egit/internal/relengtools/MapFile.java b/org.eclipse.egit.relengtools/src/org/eclipse/egit/internal/relengtools/MapFile.java index 045f716..363954f 100755 --- a/org.eclipse.egit.relengtools/src/org/eclipse/egit/internal/relengtools/MapFile.java +++ b/org.eclipse.egit.relengtools/src/org/eclipse/egit/internal/relengtools/MapFile.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2010 IBM Corporation and others. + * Copyright (c) 2000, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -19,16 +19,15 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; - import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceProxy; import org.eclipse.core.resources.IResourceProxyVisitor; import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; public class MapFile { @@ -54,7 +53,7 @@ public class MapFile { protected void loadEntries() throws CoreException { InputStream inputStream = null; - List list = new ArrayList(); + final List<MapEntry> list = new ArrayList<MapEntry>(); try { inputStream = file.getContents(); @@ -63,7 +62,9 @@ public class MapFile { String aLine = aReader.readLine(); while (aLine != null) { if (isMapLine(aLine)) { - list.add(new MapEntry(aLine)); + final MapEntry entry = new MapEntry(aLine); + if (entry.isValid()) + list.add(new MapEntry(aLine)); } aLine = aReader.readLine(); } @@ -82,7 +83,7 @@ public class MapFile { } } - this.entries = (MapEntry[]) list.toArray(new MapEntry[list.size()]); + this.entries = list.toArray(new MapEntry[list.size()]); } private boolean isMapLine(String line) { @@ -102,6 +103,10 @@ public class MapFile { return false; } + public int size() { + return entries != null ? entries.length : 0; + } + public MapEntry getMapEntry(IProject project) { for (int j = 0; j < entries.length; j++) { if (entries[j].isMappedTo(project)) { @@ -163,9 +168,14 @@ public class MapFile { if (type == IResource.FILE && resourceProxy.getName().endsWith( - MAP_FILE_NAME_ENDING)) - mapFiles.add(new MapFile((IFile) resourceProxy - .requestResource())); + MAP_FILE_NAME_ENDING)) { + final MapFile map = new MapFile( + (IFile) resourceProxy.requestResource()); + + // don't both with map files that didn't contain GIT entries + if (map.size() > 0) + mapFiles.add(map); + } return true; } |
