From cb285cbfddfc0b633d6b8cdb4dc0d2bd2b8b51ef Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 05 Jan 2012 17:34:05 -0500 Subject: [PATCH] Fixed bug in receive hook for repositories in subfolders --- src/com/gitblit/client/MessageRenderer.java | 192 +++++++++++++++++++++++++++++++++-------------- 1 files changed, 134 insertions(+), 58 deletions(-) diff --git a/src/com/gitblit/client/MessageRenderer.java b/src/com/gitblit/client/MessageRenderer.java index c848cef..2fe3415 100644 --- a/src/com/gitblit/client/MessageRenderer.java +++ b/src/com/gitblit/client/MessageRenderer.java @@ -21,6 +21,7 @@ import java.awt.Font; import java.io.Serializable; +import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTable; @@ -28,7 +29,9 @@ import javax.swing.border.LineBorder; import javax.swing.table.TableCellRenderer; -import com.gitblit.models.SyndicatedEntryModel; +import org.eclipse.jgit.lib.Constants; + +import com.gitblit.models.FeedEntryModel; /** * Message renderer displays the short log message and then any refs in a style @@ -41,29 +44,91 @@ private static final long serialVersionUID = 1L; - private static final String R_TAGS = "refs/tags/"; - - private static final String R_HEADS = "refs/heads/"; - - private static final String R_REMOTES = "refs/remotes/"; - private final GitblitClient gitblit; - + + private final ImageIcon mergeIcon; + + private final ImageIcon blankIcon; + private final JLabel messageLabel; + + private final JLabel headLabel; private final JLabel branchLabel; + private final JLabel remoteLabel; + + private final JLabel tagLabel; + + public MessageRenderer() { + this(null); + } + public MessageRenderer(GitblitClient gitblit) { - super(new FlowLayout(FlowLayout.LEFT, 10, 1)); + super(new FlowLayout(FlowLayout.LEFT, Utils.MARGIN, 1)); this.gitblit = gitblit; + + mergeIcon = new ImageIcon(getClass().getResource("/commit_merge_16x16.png")); + blankIcon = new ImageIcon(getClass().getResource("/blank.png")); messageLabel = new JLabel(); - branchLabel = new JLabel(); - branchLabel.setOpaque(true); - Font font = branchLabel.getFont(); - branchLabel.setFont(font.deriveFont(font.getSize2D() - 1f)); + + headLabel = newRefLabel(); + branchLabel = newRefLabel(); + remoteLabel = newRefLabel(); + tagLabel = newRefLabel(); + add(messageLabel); + add(headLabel); add(branchLabel); + add(remoteLabel); + add(tagLabel); + } + + private JLabel newRefLabel() { + JLabel label = new JLabel(); + label.setOpaque(true); + Font font = label.getFont(); + label.setFont(font.deriveFont(font.getSize2D() - 1f)); + return label; + } + + private void resetRef(JLabel label) { + label.setText(""); + label.setBackground(messageLabel.getBackground()); + label.setBorder(null); + label.setVisible(false); + } + + private void showRef(String ref, JLabel label) { + String name = ref; + Color bg = getBackground(); + Border border = null; + if (name.startsWith(Constants.R_HEADS)) { + // local branch + bg = Color.decode("#CCFFCC"); + name = name.substring(Constants.R_HEADS.length()); + border = new LineBorder(Color.decode("#00CC33"), 1); + } else if (name.startsWith(Constants.R_REMOTES)) { + // remote branch + bg = Color.decode("#CAC2F5"); + name = name.substring(Constants.R_REMOTES.length()); + border = new LineBorder(Color.decode("#6C6CBF"), 1); + } else if (name.startsWith(Constants.R_TAGS)) { + // tag + bg = Color.decode("#FFFFAA"); + name = name.substring(Constants.R_TAGS.length()); + border = new LineBorder(Color.decode("#FFCC00"), 1); + } else if (name.equals(Constants.HEAD)) { + // HEAD + bg = Color.decode("#FFAAFF"); + border = new LineBorder(Color.decode("#FF00EE"), 1); + } else { + } + label.setText(name); + label.setBackground(bg); + label.setBorder(border); + label.setVisible(true); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, @@ -74,56 +139,67 @@ setBackground(table.getBackground()); messageLabel.setForeground(isSelected ? table.getSelectionForeground() : table .getForeground()); - SyndicatedEntryModel entry = (SyndicatedEntryModel) value; - - // show message in BOLD if its a new entry - if (entry.published.after(gitblit.getLastFeedRefresh(entry.repository, entry.branch))) { - messageLabel.setText("<html><body><b>" + entry.title); - } else { - messageLabel.setText(entry.title); + if (value == null) { + return this; } + FeedEntryModel entry = (FeedEntryModel) value; - // reset ref label - branchLabel.setText(""); - branchLabel.setBackground(messageLabel.getBackground()); - branchLabel.setBorder(null); - - if (entry.tags != null) { - for (String tag : entry.tags) { - if (tag.equals(entry.branch)) { - continue; - } - String name = tag; - Color bg = getBackground(); - Border border = null; - if (name.startsWith(R_HEADS)) { - // local branch - bg = Color.decode("#CCFFCC"); - name = name.substring(R_HEADS.length()); - border = new LineBorder(Color.decode("#00CC33"), 1); - } else if (name.startsWith(R_REMOTES)) { - // origin branch - bg = Color.decode("#CAC2F5"); - name = name.substring(R_REMOTES.length()); - border = new LineBorder(Color.decode("#6C6CBF"), 1); - } else if (name.startsWith(R_TAGS)) { - // tag - bg = Color.decode("#FFFFAA"); - name = name.substring(R_TAGS.length()); - border = new LineBorder(Color.decode("#FFCC00"), 1); - } else if (name.equals("HEAD")) { - // HEAD - bg = Color.decode("#FFAAFF"); - border = new LineBorder(Color.decode("#FF00EE"), 1); - } else { - - } - branchLabel.setText(" " + name + " "); - branchLabel.setBackground(bg); - branchLabel.setBorder(border); + if (gitblit == null) { + // no gitblit client, just display message + messageLabel.setText(entry.title); + } else { + // show message in BOLD if its a new entry + if (entry.published.after(gitblit.getLastFeedRefresh(entry.repository, entry.branch))) { + messageLabel.setText("<html><body><b>" + entry.title); + } else { + messageLabel.setText(entry.title); } } + // reset ref label + resetRef(headLabel); + resetRef(branchLabel); + resetRef(remoteLabel); + resetRef(tagLabel); + + int parentCount = 0; + if (entry.tags != null) { + for (String tag : entry.tags) { + if (tag.startsWith("ref:")) { + // strip ref: + tag = tag.substring("ref:".length()); + } else { + // count parents + if (tag.startsWith("parent:")) { + parentCount++; + } + } + if (tag.equals(entry.branch)) { + // skip current branch label + continue; + } + if (tag.startsWith(Constants.R_HEADS)) { + // local branch + showRef(tag, branchLabel); + } else if (tag.startsWith(Constants.R_REMOTES)) { + // remote branch + showRef(tag, remoteLabel); + } else if (tag.startsWith(Constants.R_TAGS)) { + // tag + showRef(tag, tagLabel); + } else if (tag.equals(Constants.HEAD)) { + // HEAD + showRef(tag, headLabel); + } + } + } + + if (parentCount > 1) { + // multiple parents, show merge icon + messageLabel.setIcon(mergeIcon); + } else { + messageLabel.setIcon(blankIcon); + } return this; } } \ No newline at end of file -- Gitblit v1.9.1