From: Roger C. Soares Date: Mon, 24 Mar 2008 02:58:07 GMT Subject: [EGIT PATCH 4/4] Show only commits in the current branch. Message-ID: <1206327487-6543-1-git-send-email-rogersoares@intelinet.com.br> This is a quick hack to have the functionality. It filters the commits returned by GitFileHistory.getHistoryFor. Signed-off-by: Roger C. Soares --- org.spearce.egit.ui/icons/elcl16/cbcommits.gif | Bin 0 -> 354 bytes .../src/org/spearce/egit/ui/GitHistoryPage.java | 80 ++++++++++++++++++++ .../egit/ui/PluginPreferenceInitializer.java | 1 + .../src/org/spearce/egit/ui/UIIcons.java | 3 + .../src/org/spearce/egit/ui/UIPreferences.java | 2 + 5 files changed, 86 insertions(+), 0 deletions(-) create mode 100644 org.spearce.egit.ui/icons/elcl16/cbcommits.gif diff --git a/org.spearce.egit.ui/icons/elcl16/cbcommits.gif b/org.spearce.egit.ui/icons/elcl16/cbcommits.gif new file mode 100644 index 0000000000000000000000000000000000000000..21359d460ff9c3332482d503bab5d31a4db02188 GIT binary patch literal 354 zcmZ?wbhEHb6krfwSjx!2(7+H=wQAzh<9qM*?tRd;_hIMWhh6&~cJ6!Jy6|5@XKXY~i3H5`0deeh+?!PgZB-&7oWQ-0`e$)UHUhu)SSdRKfHgh~#- zFFO38;K+x9!ygNde9SxYG5;u#{FHa}bN12CIY+-_9sQDh^lRqPuh~G`DM5-qSs1w( z>=|?zfB@tt2DbVG^9ww5_!wuMZ52MCV<^EOs326!!g!GV%SVs?6+&7LZZprsD?V7_ zmB_lXLhJA1F1IBNobpN+8KoQZrDa>|MMcC?7{w&}>V<`c@`a`f)$ filteredFileRevisions = Collections.synchronizedList(new ArrayList()); + Map parentMap = new HashMap(); + List commitsToWalk = new ArrayList(); + if (fileRevisions.size() > 0) { + try { + Commit initialCommit = repositoryMapping.getRepository().mapCommit(currentHead); + verifyCurrentHeadCommits(repositoryMapping.getRepository(), parentMap, commitsToWalk, initialCommit); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + for(IFileRevision rev : fileRevisions) { + if(rev instanceof GitCommitFileRevision) { + String revId = rev.getContentIdentifier(); + if(parentMap.containsKey(revId)) { + filteredFileRevisions.add(rev); + } + } else { + filteredFileRevisions.add(rev); + } + } + } + fileRevisions = filteredFileRevisions; + } + findToolbar.setFileRevisions(fileRevisions, newtags, branches); Display.getDefault().syncExec(new Runnable() { public void run() { @@ -891,6 +950,27 @@ public class GitHistoryPage extends HistoryPage implements IAdaptable, } } + private void verifyCurrentHeadCommits(Repository repository, + Map parentMap, List commitsToWalk, Commit initialCommit) throws IOException { + Commit commit = initialCommit; + while (commit.getParentIds() != null && commit.getParentIds().length > 0 + && !parentMap.containsKey(commit.getCommitId().toString())) { + String cid = commit.getCommitId().toString(); + parentMap.put(cid, cid); + commit = repository.mapCommit(commit.getParentIds()[0]); + int parentCount = commit.getParentIds().length; + if (parentCount > 1) { + for (int i = 1; i < parentCount; i++) { + commitsToWalk.add(commit.getParentIds()[i]); + } + } + } + while (commitsToWalk.size() > 0) { + commit = repository.mapCommit(commitsToWalk.remove(0)); + verifyCurrentHeadCommits(repository, parentMap, commitsToWalk, commit); + } + } + HistoryRefreshJob historyRefreshJob = new HistoryRefreshJob("Git history refresh"); class GitHistoryContentProvider implements ILazyContentProvider { diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/PluginPreferenceInitializer.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/PluginPreferenceInitializer.java index c8ca116..3464fe7 100644 --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/PluginPreferenceInitializer.java +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/PluginPreferenceInitializer.java @@ -41,6 +41,7 @@ public class PluginPreferenceInitializer extends AbstractPreferenceInitializer { prefs.setDefault(UIPreferences.RESOURCEHISTORY_SHOW_REV_DETAIL, true); prefs.setDefault(UIPreferences.RESOURCEHISTORY_SHOW_REV_COMMENT, true); prefs.setDefault(UIPreferences.RESOURCEHISTORY_SHOW_TOOLTIPS, false); + prefs.setDefault(UIPreferences.RESOURCEHISTORY_SHOW_ONLY_CURRENT_BRANCH, false); prefs.setDefault(UIPreferences.FINDTOOLBAR_IGNORE_CASE, true); prefs.setDefault(UIPreferences.FINDTOOLBAR_FIND_IN, 2); diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/UIIcons.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/UIIcons.java index a04bb5c..4021fdc 100644 --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/UIIcons.java +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/UIIcons.java @@ -42,6 +42,8 @@ public class UIIcons { /** Find icon */ public static final ImageDescriptor ELCL16_FIND; + /** Show only commits in the current branch icon */ + public static final ImageDescriptor ELCL16_HEAD; /** Next arrow icon */ public static final ImageDescriptor ELCL16_NEXT; /** Previous arrow icon */ @@ -67,6 +69,7 @@ public class UIIcons { OVR_CONFLICT = map("ovr/conflict.gif"); OVR_ASSUMEVALID = map("ovr/assumevalid.gif"); ELCL16_FIND = map("elcl16/find.gif"); + ELCL16_HEAD = map("elcl16/cbcommits.gif"); ELCL16_NEXT = map("elcl16/next.gif"); ELCL16_PREVIOUS = map("elcl16/previous.gif"); ELCL16_COMMIT = map("elcl16/commit.gif"); diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/UIPreferences.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/UIPreferences.java index 2ff7589..fbc7064 100644 --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/UIPreferences.java +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/UIPreferences.java @@ -32,6 +32,8 @@ public class UIPreferences { /** */ public final static String RESOURCEHISTORY_SHOW_FINDTOOLBAR = "resourcehistory_show_findtoolbar"; /** */ + public final static String RESOURCEHISTORY_SHOW_ONLY_CURRENT_BRANCH = "resourcehistory_show_only_current_branch"; + /** */ public final static String FINDTOOLBAR_IGNORE_CASE = "findtoolbar_ignore_case"; /** */ public final static String FINDTOOLBAR_FIND_IN = "findtoolbar_find_in"; -- 1.5.4.1