Yi EungJun 2013-10-30
Remove every trailing whitespaces in every files.
Third-party libraries are excepted.
@a67259357d8ebb1aa58250bd7d6ae82443ef8329
.travis.yml
--- .travis.yml
+++ .travis.yml
@@ -1,8 +1,8 @@
 language: java # to trigger the build on a 'jvm-otp' travis worker
 env:
   - PLAY_VERSION=2.1.0
-before_script: 
+before_script:
   - wget http://downloads.typesafe.com/play/${PLAY_VERSION}/play-${PLAY_VERSION}.zip
   - unzip -q play-${PLAY_VERSION}.zip
   - set SBT_OPTS= -Xms256m Xmx52m -XX:MaxPermSize=512m
-script: play-${PLAY_VERSION}/play test 
+script: play-${PLAY_VERSION}/play test
app/Global.java
--- app/Global.java
+++ app/Global.java
@@ -80,7 +80,7 @@
         }
 
         PullRequest.regulateNumbers();
-        
+
         NotificationMail.startSchedule();
     }
 
app/actors/PullRequestEventActor.java
--- app/actors/PullRequestEventActor.java
+++ app/actors/PullRequestEventActor.java
@@ -13,10 +13,10 @@
 
 /**
  * Push가 되었을때 관련있는 PullRequest의 충돌/해결/커밋변경 이벤트 등록
- * 
+ *
  * 변경된 branch 와 관련있는 pull-request 에 충돌이 발생하거나 충돌이 해결되었을때
  * 해당 pull-request 를 보낸 사람에게 알림을 주고 이벤트를 추가한다.
- * 
+ *
  * 커밋목록이 변경되었을때 알림을 주고 커밋변경 이벤트를 추가한다.
  */
 public class PullRequestEventActor extends UntypedActor {
@@ -32,34 +32,34 @@
 
         for (PullRequest pullRequest : pullRequests) {
             PullRequestMergeResult mergeResult = pullRequest.attemptMerge();
-            
+
             if (mergeResult.commitChanged()) {
-            
+
                 mergeResult.saveCommits();
-                
+
                 if (!mergeResult.getNewCommits().isEmpty()) {
-                    PullRequestEvent.addCommitEvents(message.getSender(), pullRequest, mergeResult.getNewCommits());                
+                    PullRequestEvent.addCommitEvents(message.getSender(), pullRequest, mergeResult.getNewCommits());
                 }
             }
-                        
+
             if (mergeResult.conflicts()) {
-                
+
                 mergeResult.setConflictStateOfPullRequest();
-                              
+
                 NotificationEvent notiEvent = NotificationEvent.addPullRequestMerge(message.getSender(),
                     pullRequest, mergeResult.getGitConflicts(), message.getRequest(), State.CONFLICT);
                 PullRequestEvent.addMergeEvent(notiEvent.getSender(), EventType.PULL_REQUEST_MERGED, State.CONFLICT, pullRequest);
-                                
+
             } else if (mergeResult.resolved()) {
 
                 mergeResult.setResolvedStateOfPullRequest();
-            
+
                 NotificationEvent notiEvent = NotificationEvent.addPullRequestMerge(message.getSender(),
                     pullRequest, mergeResult.getGitConflicts(), message.getRequest(), State.RESOLVED);
                 PullRequestEvent.addMergeEvent(notiEvent.getSender(), EventType.PULL_REQUEST_MERGED, State.RESOLVED, pullRequest);
 
             }
-            
+
             mergeResult.save();
         }
     }
app/assets/stylesheets/less/_common.less
--- app/assets/stylesheets/less/_common.less
+++ app/assets/stylesheets/less/_common.less
@@ -45,13 +45,13 @@
         list-style: none;
         font-size: 0;
         .inline-block;
-        
+
         .page-num {
             .inline-block;
             padding: 0 10px;
             font-size: 12px;
             color: #8e9094;
-            
+
             .current {
                 color: @orange; /*#4489A4;*/
                 font-weight: bold;
@@ -60,7 +60,7 @@
                 margin:0; width:30px;
                 text-align:center; font-weight:bold;
                 border:1px solid #eee;
-                &:hover, &:focus { 
+                &:hover, &:focus {
                     /*background:#f5f5f5;*/
                     .box-shadow(inset -1px -1px 2px rgba(0,0,0,0.1));
                     color:@primary; border-color:@primary;
@@ -108,10 +108,10 @@
     border: 1px solid #ccc;
 }
 .avatar-wrap {
-    width:32px; height:32px; 
+    width:32px; height:32px;
     vertical-align:middle;
     overflow:hidden; display:inline-block;
-    
+
     &.small { width:24px; height:24px;   }
     &.mid   { width:64px; height:64px;   }
     &.large { width:128px; height:128px; }
app/assets/stylesheets/less/_mixins.less
--- app/assets/stylesheets/less/_mixins.less
+++ app/assets/stylesheets/less/_mixins.less
@@ -88,7 +88,7 @@
     background: -o-linear-gradient(top, @startColor 0%, @endColor 100%); /* Opera 11.10+ */
     background: -ms-linear-gradient(top, @startColor 0%, @endColor 100%); /* IE10+ */
     background: linear-gradient(to bottom, @startColor 0%, @endColor 100%); /* W3C */
-    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@{startColor}', endColorstr='@{endColor}',GradientType=0 ); /* IE6-9 */    
+    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@{startColor}', endColorstr='@{endColor}',GradientType=0 ); /* IE6-9 */
 }
 
 // BackgroundSize
app/assets/stylesheets/less/_page.less
--- app/assets/stylesheets/less/_page.less
+++ app/assets/stylesheets/less/_page.less
@@ -91,17 +91,17 @@
                 line-height: 40px;
                 border-bottom: 0px solid #FFF;
                 border-bottom:10px solid #FFF;
-                
+
                 a {
                     background-color:#FFF;
                     color:@yobi-background-gnv;
                     font-weight:bold;
                     .border-radius(3px 3px 0 0);
-                }    
+                }
             }
         }
     }
-    
+
     .gnb-collapse {
         position:absolute;
         right:40px;
@@ -112,7 +112,7 @@
         background:transparent;
         margin:10px 5px 10px 0;
         line-height:20px;
-        
+
         form {
             background-color:#FFF;
             padding:0;
@@ -121,7 +121,7 @@
             z-index:1;
             display:inline-block;
             .border-radius(3px);
-            
+
             input {
                 border:0;
                 outline:none;
@@ -156,7 +156,7 @@
 
     li.gnb-dropdown {
         padding:0;
-        
+
         a.gnb-dropdown-toggle {
             line-height:20px;
         }
@@ -176,12 +176,12 @@
             border-right: 4px solid transparent;
             border-left: 4px solid transparent;
             content: "";
-        } 
+        }
 
         li {
            margin-right:5px;
            margin-left:5px;
-        }   
+        }
     }
 }
 
@@ -222,7 +222,7 @@
                 > a {
                     padding:5px 10px;
                 }
-            }            
+            }
         }
 
         .gnb-search-bar {
@@ -296,7 +296,7 @@
 
     &.vertical-large {
         height:280px;
-        
+
         .project-header-wrap {
             height:280px;
         }
@@ -330,7 +330,7 @@
             text-decoration:none;
         }
     }
-    
+
     .project-owner {
         color:@primary;
         margin-left:15px;
@@ -388,8 +388,8 @@
         margin:0;
         padding:0;
         font-size:16px;
-        
-        li { 
+
+        li {
             float:left;
             margin-right:10px;
             line-height:22px;
@@ -428,7 +428,7 @@
 
     .resize-btn {
         text-align:center;
-        
+
         a {
             background-color: #7F8C8D;
             display:block;
@@ -467,7 +467,7 @@
                 color:@yobi-gray;
                 font-size:14px;
                 line-height:30px;
-                
+
                 &:hover {
                     background-color:#cacfd2;
                     color:#FFF;
@@ -500,7 +500,7 @@
             }
 
             &.active {
-                a { 
+                a {
                     background-color:#444444;
                     color:#FFF;
                     &:hover, &:focuse {
@@ -510,12 +510,12 @@
                 }
             }
 
-           
-        }
-    }    
-} 
 
-.project-page-wrap {    
+        }
+    }
+}
+
+.project-page-wrap {
     margin:30px 0;
     padding:0 40px 0 160px;
     position: relative;
@@ -525,11 +525,11 @@
         padding-left : 70px;
 
         .project-menu {
-            
+
             li {
                 width:40px;
                 a {
-                    .menu-title { 
+                    .menu-title {
                         display:none;
                     }
                 }
@@ -577,7 +577,7 @@
             .program {
                 color:#fff;
             }
-        }   
+        }
 
         .naver:hover {
             color: #1f7f12;
@@ -662,7 +662,7 @@
             /*.helvetic-light;*/
             .high-light {
                 color: @yobi-primary;
-                
+
             }
             /*font-family:'Myriad Pro Light', 'Droid Sans', Tahoma, sans-serif;*/
            font-family:@base-font-family;
@@ -728,7 +728,7 @@
                 letter-spacing:1.1px;
                 &:first-child {
                     margin-left:0;
-                }                
+                }
             }
         }
     }
@@ -785,7 +785,7 @@
             -o-box-sizing: border-box;
             -ms-box-sizing: border-box;
             box-sizing: border-box;
-            
+
 
             &:first-child, &:nth-child(4) {
                 margin-left:0;
@@ -822,7 +822,7 @@
     }
 }
 
-.sample {    
+.sample {
     overflow: hidden;
     background-color:#f9f9f9;
     padding:80px 20px;
@@ -841,7 +841,7 @@
             height:280px;
             text-align:center;
             padding-top:20px;
-            
+
             img {
                 vertical-align:top;
                 width:360px;
@@ -861,7 +861,7 @@
                 strong { color:@primary;}
             }
         }
-    }    
+    }
 }
 
 .site-guide-outer {
@@ -874,8 +874,8 @@
         display:none;
     }
 
-    h3 { 
-        margin:0; 
+    h3 {
+        margin:0;
         padding:0;
         font-size: 30px;
         color:@yobi-primary;
@@ -960,8 +960,8 @@
 .guide-toggle {
     text-align: center;
     margin-bottom:20px;
-   
-    
+
+
 
     button {
         border:1px solid rgba(0,0,0, .1);
@@ -982,7 +982,7 @@
         margin-bottom:15px;
         .activity-streams {
             margin: 0;
-            
+
             .warning-none {
                 font-size:16px;
                 padding:15px 20px;
@@ -1009,7 +1009,7 @@
                     height: 100%;
                 }
 
-               
+
 
                 &:first-child  {
                     &:before { top:20px }
@@ -1026,7 +1026,7 @@
                     .border-radius(50%);
                     background: #FFF;
                     position:absolute;
-                    top:12px; 
+                    top:12px;
                     left:0;
                     color:@state-open;
                     text-align:center;
@@ -1070,10 +1070,10 @@
                         border-color: #e5e5e5;
                         background: #F8F8F8;
                         .rotate(45deg);
-                    }   
+                    }
 
                     .stream-info {
-                        
+
                         .avatar-wrap { float:left; margin-top:3px;}
 
                         .title {
@@ -1082,14 +1082,14 @@
                             font-weight:bold;
                             padding-left:55px;
                         }
-                    
-                        .meta { 
+
+                        .meta {
                             font-size:12px;
                             padding-left:55px;
                             color:#bbb;
-                            margin-top:5px; 
+                            margin-top:5px;
 
-                            .author { 
+                            .author {
                                 color:#666;
                                 font-weight:bold;
                                 &:hover {color:@link-hover-color;}
@@ -1100,23 +1100,23 @@
                             margin-top:3px;
                             font-size:12px;
                             color:#888;
-                            padding-left:12px;   
+                            padding-left:12px;
                             overflow:hidden;
-                            line-height:20px;    
+                            line-height:20px;
                             .transition(all 0.3s ease);
                             min-height:20px;
 
                             .message {
                                 word-break : break-all;
-                                line-height:20px;    
+                                line-height:20px;
                             }
 
                             &.nowrap {
                                 min-height:20px;
                                 height:20px;
                                 .message {
-                                    text-overflow: ellipsis; 
-                                    white-space: nowrap; 
+                                    text-overflow: ellipsis;
+                                    white-space: nowrap;
                                     overflow: hidden;
                                 }
                             }
@@ -1140,14 +1140,14 @@
                 }
                 .activity-desc {
                     overflow: hidden;
-                    
+
                     .header-text {
                         margin-top: 0px;
                         margin-bottom: 6px;
                         font-size: 12px;
                         line-height: 100%;
                         color: #666;
-                        
+
                         .actor {
                             color: @orange;/*#D06930;*/
                             font-weight: bold;/*normal;*/
@@ -1160,7 +1160,7 @@
                     }
                     .author { font-weight:bold; }
                     .date { color:#bbb; margin-left:5px; }
-                    
+
                     .desc {
                         color: #888;
                         font-size: 11px;
@@ -1241,14 +1241,14 @@
             margin-bottom:10px;
             .border-radius(6px 6px 0 0);
 
-            .title { 
-                background-color:@yobi-cyan-light; 
-                padding:10px; 
+            .title {
+                background-color:@yobi-cyan-light;
+                padding:10px;
                 display:block;
                 font-weight:bold;
                 .border-radius(6px 6px 0 0);
 
-                border-bottom:1px solid rgba(0,0,0, .15); 
+                border-bottom:1px solid rgba(0,0,0, .15);
                 margin-bottom:10px;
             }
 
@@ -1598,7 +1598,7 @@
 
                 }
 
-                button { 
+                button {
                     position:absolute;
                     top:7px;
                     right:5px;
@@ -1607,7 +1607,7 @@
 
             }
         }
-        
+
         .btn-advanced {
             color:#707070;
             font-weight:bold;
@@ -1634,8 +1634,8 @@
             .btn-advanced {
                 i { .ico-arrow-up-blue; }
             }
-            .caret-wrap .caret { 
-                border-top:0; 
+            .caret-wrap .caret {
+                border-top:0;
                 border-bottom:4px solid @blue;
             }
         }
@@ -1847,7 +1847,7 @@
             padding: 0 15px; /*10px;*/
             margin-bottom: 14px;
             width:100%;
-            
+
             .icor {
                 margin:17px !important;
                 .ico-qa-plus;
@@ -2096,8 +2096,8 @@
 }
 
 .check-all {
-    width:40px; 
-    vertical-align: middle; 
+    width:40px;
+    vertical-align: middle;
     text-align:center;
 }
 
@@ -2310,7 +2310,7 @@
                         -webkit-box-sizing: border-box;
                     }
                 }
-                
+
                 .content-wrap {
                     label {
                         font-weight:bold;
@@ -2325,7 +2325,7 @@
                         -webkit-box-sizing: border-box;
                     }
                 }
-               
+
                 .actions {
                     text-align: right;
                     height: 26px;
@@ -2592,9 +2592,9 @@
 }
 
 .board-header {
-    display:block; 
+    display:block;
     clear:both;
-    height:30px; 
+    height:30px;
     padding: 10px 20px;
     border:none;
     background-color:@yobi-white-dark;
@@ -2611,9 +2611,9 @@
         color: #000;
     }
     .date {
-        display:inline-block; 
-        vertical-align:top; 
-        line-height:29px; 
+        display:inline-block;
+        vertical-align:top;
+        line-height:29px;
         margin-right:20px;
         color: #999;
     }
@@ -2639,7 +2639,7 @@
     .author-info {
         /*margin-bottom: 34px;*/
         padding:15px 0 0 10px;
-        
+
         dl { margin-bottom:20px; }
         dl.author { height:51px; overflow:hidden; }
         p {
@@ -2672,7 +2672,7 @@
 .board-comment-wrap {
     display:block; clear:both;
     font-family:@base-font-family;
-    
+
     .comment-header {
         color: #222;
         font-size: 16px;
@@ -2710,7 +2710,7 @@
                     border-color: #BDC3C7;
                     background-color: #E5F0FC;
                     .rotate(45deg);
-                }   
+                }
 
                 .meta-info {
                     height:22px;
@@ -2719,11 +2719,11 @@
                     border-bottom:1px solid #BDC3C7;
 
                     .yobicon-comment {vertical-align: middle;}
-                    .comment_author {font-size:13px; margin-right:5px; }   
+                    .comment_author {font-size:13px; margin-right:5px; }
                     .ago { color:#7F8C8D;}
                     .edit { color: #7F8C8D;}
                 }
-                
+
                 .attach {
                     color: #4489A4;
                     padding:10px;
@@ -2739,10 +2739,10 @@
                     font-size: 12px;
                     padding:0 15px;
                     a { font-weight:bold; border-bottom:1px dotted; }
-                    
+
                     .commitMsg {
                         white-space:pre-line;
-                        padding:5px; 
+                        padding:5px;
                         background:#f7f7f7;
                         border:1px solid #eee;
                         .border-radius(2px);
@@ -2756,7 +2756,7 @@
 
             &.author {
                 .media-body {
-                    &:before { background-color: #f8f8f8; }   
+                    &:before { background-color: #f8f8f8; }
                 }
 
                 .meta-info { background-color:#f8f8f8; }
@@ -2791,11 +2791,11 @@
         }
 
         .event {
-            
+
             padding:15px 0 15px 75px;
             font-size:14px;
             line-height:14px;
-            .state { 
+            .state {
                 color:#FFF;
                 padding: 6px 0;
                 text-align:center;
@@ -2805,9 +2805,9 @@
                 font-weight:bold;
                 .border-radius(5px);
                 margin-right:10px;
-                
+
                 i {margin-right:3px;}
-                
+
 
                 &.closed { background-color: @state-closed;}
                 &.open { background-color : @state-open;}
@@ -2968,9 +2968,9 @@
                 font-weight: bold;
                 &:hover { color:@primary; }
             }
-            .btn-insert { 
-                display:none; 
-                line-height: 20px; 
+            .btn-insert {
+                display:none;
+                line-height: 20px;
                 margin-top: 2px; margin-right: 10px;
                 .box-shadow(none);
                 &:hover { background:#fff; color:@primary; }
@@ -3028,18 +3028,18 @@
     .title {
         margin-bottom: 15px;
         font-size:18px;
-        
+
 	}
 	.error {
-		margin-bottom: 5px;        	
+		margin-bottom: 5px;
     }
-        
+
 	.message {
 		margin-bottom: 15px;
 		color:red;
 		font-weight:bold;
 	}
-        	
+
     .content {
         height:190px; /*320px;*/
         background-color: #F9F9F9;
@@ -3100,8 +3100,8 @@
     .avatar-wrap { margin-right:10px; }
 
     .title {
-        text-overflow: ellipsis; 
-        white-space: nowrap; 
+        text-overflow: ellipsis;
+        white-space: nowrap;
         overflow: hidden;
         padding:5px 0;
     }
@@ -3114,7 +3114,7 @@
             display:inline-block;
             margin-left:10px;
             .num { color: @secondary; font-weight:bold; }
-            .icon {  margin-right: 3px; color : #51aacc; } 
+            .icon {  margin-right: 3px; color : #51aacc; }
         }
         .lb { display:inline-block; }
     }
@@ -3126,11 +3126,11 @@
             color:@secondary; font-size:13px;
         }
     }
-    
-    .title-link { 
-        margin:5px 0; margin-right:5px; 
+
+    .title-link {
+        margin:5px 0; margin-right:5px;
         font-size:14px; font-weight:bold;
-        
+
         .issue-id { color:#939393; margin-right:5px; font-size:13px; }
     }
 
@@ -3162,15 +3162,15 @@
 
 .relative-issue {
     display:none;
-    
+
     dt { color:#797979; }
     ul {
         margin-left:5px;
-        
+
         .issue-item {
             padding:0;
             border:none;
-            
+
             .date { font-size:11px; color:#999; }
         }
     }
@@ -3229,7 +3229,7 @@
             height:38px;
             float:left;
             padding-right: 10px;
-            
+
             .img-rounded {
                 .inline-block;
                 vertical-align:top;
@@ -3237,7 +3237,7 @@
                 height:100%;
             }
         }
-        
+
         .contents {
             margin-left: 100px;
 
@@ -3250,18 +3250,18 @@
                 margin-bottom: 5px;
                 font-weight: bold;
                 font-size: 15px;
-                
+
                 .label-notice {
                     background:@secondary;
                 }
 
                 a {
-                    text-overflow: ellipsis; 
-                    white-space: nowrap; 
+                    text-overflow: ellipsis;
+                    white-space: nowrap;
                     overflow: hidden;
                 }
             }
-            
+
             .infos {
                 line-height: 14px;
                 font-size: 11px;
@@ -3274,9 +3274,9 @@
                 .comment-wrap {
                     display:inline-block;
                     margin-left:10px;
-                    
+
                     .num { color: @secondary; font-weight:bold; }
-                    .icon {  margin-right: 3px; color : #51aacc; } 
+                    .icon {  margin-right: 3px; color : #51aacc; }
                 }
             }
         }
@@ -3401,7 +3401,7 @@
         .minimap-links {
             position:relative;
             width:100%; height:400px;
-            
+
             a {
                 position:absolute;
                 width:100%; min-height:2px;
@@ -3427,7 +3427,7 @@
             content:'/'; margin-left:4px;
         }
         a:first-of-type { margin-left:0; }
-        a:last-of-type { 
+        a:last-of-type {
             color:@primary;
             &:after { content:''; }
         }
@@ -3436,7 +3436,7 @@
     .nav-tabs {
         margin-bottom:0;
     }
-    
+
     .actrow {
         clear:both; margin-top:10px;
     }
@@ -3473,7 +3473,7 @@
                     &:hover { color:@link-hover-color; text-decoration:underline; }
                 }
             }
-            
+
             .browse {  width:70px; text-align:center; }
         }
     }
@@ -3512,7 +3512,7 @@
         background-color: #f5f5f5;
         margin-bottom:15px;
     }
-    
+
     ul.comments {
         width:800px;
         font-family:@base-font-family;
@@ -3542,7 +3542,7 @@
             height:100%;
         }
     }
-    
+
     .cell {
         display: table-cell;
         background-color: @white;
@@ -3605,7 +3605,7 @@
         width: 100%;
 
         td { padding: 0 15px 0 5px; }
-        
+
         .thead {
             background-color: #f5f5f5;
             line-height: 34px;
@@ -3718,18 +3718,18 @@
     }
 
     .list-wrap { display:none; }
-    
+
     .file-wrap {
         display:block;
         width:100%;
-        
+
         p {
             margin: 100px 0; text-align:center;
             .filename { display:block; font-size:20px; }
             .filesize { display:block; font-size:13px; margin-bottom:20px; color:#999; }
         }
     }
-    
+
     .btnResize {
         font-family:Arial !important;
         width:10px; cursor:e-resize;
@@ -4355,7 +4355,7 @@
 .mass-update-form {
    position:relative;
    -webkit-transition:padding 0.5s;
-   
+
    &.fixed {
        position:fixed; width:100%;
        top:0; background:#fff;
@@ -4422,7 +4422,7 @@
         text-shadow: 1px 1px rgba(255, 255, 255, 0.5);
         .box-shadow(1px 1px 1px rgba(0, 0, 0, 0.15));
         .border-radius(2px);
-    } 
+    }
 }
 
 
@@ -4600,7 +4600,7 @@
         width: 40px;
     }
     .filename { float:left; line-height:30px; }
-    
+
     .hide {
         display:none;
     }
app/assets/stylesheets/less/_sprites.less
--- app/assets/stylesheets/less/_sprites.less
+++ app/assets/stylesheets/less/_sprites.less
@@ -288,7 +288,7 @@
     width: 14px;
     height: 14px;/*13px;*/
     background-position:-136px -152px;
-    
+
     /*background-position: -28px -27px;*/
     /*&:hover {
         background-position: -44px -27px;
@@ -383,7 +383,7 @@
         */
         margin-right: 5px;
         vertical-align: middle;
-        /*        
+        /*
         width: 11px;
         height: 11px;
         background-position: -91px -13px;
@@ -488,13 +488,13 @@
 .ico-err1 {
     width: 62px;
     height: 82px;
-    background-position: -5px -160px;    
+    background-position: -5px -160px;
 }
 
 .ico-err2 {
     width: 50px;
     height: 80px;
-    background-position: -80px -160px;    
+    background-position: -80px -160px;
 }
 
 .btn-gray-arrow {
app/assets/stylesheets/less/_temporary.less
--- app/assets/stylesheets/less/_temporary.less
+++ app/assets/stylesheets/less/_temporary.less
@@ -2,7 +2,7 @@
 .pop-watch {
     .content { padding: 10px 25px; }
     .brow { text-align:center; padding:10px 0; }
-    
+
     ul {
         margin: 0px;
         padding: 5px;
@@ -22,7 +22,7 @@
     button.dropdown-toggle {
         padding:0; margin:0; border-left:none;
         .border-radius(0 2px 2px 0);
-        
+
         &.pl {
             .d-label { width:auto; padding:4px 0px 4px 5px; }
             .d-caret { border-left:none; }
@@ -36,15 +36,15 @@
         padding:8px;
         a { display: block}
         .num-badge { padding:0 2px; }
-        
+
         &.active {
             color: #fff;
             background: @secondary;
             font-weight:bold;
             .border-radius (6px);
-            
+
             .num-badge { color:#fff; }
-            
+
             a:hover { color:#fff; }
         }
     }
@@ -52,7 +52,7 @@
 
 .caret-wrap {
     padding:5px;
-    
+
     .caret {
         display: inline-block;
         width: 0;
@@ -61,9 +61,9 @@
         border-top: 4px solid @blue;
         border-right: 4px solid transparent;
         border-left: 4px solid transparent;
-        content: "";        
+        content: "";
         margin-top:9px;
-        
+
         &.up { border-top:0; border-bottom-width:4px solid @blue; }
         &.down { border-top:4px solid @blue; border-bottom:0; }
     }
app/assets/stylesheets/less/_variables.less
--- app/assets/stylesheets/less/_variables.less
+++ app/assets/stylesheets/less/_variables.less
@@ -9,7 +9,7 @@
 @base-webfont-path: "/assets/images/webfont";
 
 // Typography
-@base-font-family:"Lato", "Helvetica Neue", "Helvetica", "Tahoma", "나눔고딕", "NanumGothic", "NanumGothicOTF", "맑은고딕", "Malgun Gothic", dotum, Arial; 
+@base-font-family:"Lato", "Helvetica Neue", "Helvetica", "Tahoma", "나눔고딕", "NanumGothic", "NanumGothicOTF", "맑은고딕", "Malgun Gothic", dotum, Arial;
 /*'Droid Sans', Tahoma;*/
 /*, '돋움', Dotum, Arial, sans-serif;*/
 @base-font-size  : 13px;
@@ -33,8 +33,8 @@
   font-style: normal;
   font-weight: 300;
   src: url('http://themes.googleusercontent.com/static/fonts/lato/v6/zLhfkPOm_5ykmdm-wXaiuw.eot');
-  src: local('Lato Light'), local('Lato-Light'), 
-       url('http://themes.googleusercontent.com/static/fonts/lato/v6/zLhfkPOm_5ykmdm-wXaiuw.eot') format('embedded-opentype'), 
+  src: local('Lato Light'), local('Lato-Light'),
+       url('http://themes.googleusercontent.com/static/fonts/lato/v6/zLhfkPOm_5ykmdm-wXaiuw.eot') format('embedded-opentype'),
        url('http://themes.googleusercontent.com/static/fonts/lato/v6/KT3KS9Aol4WfR6Vas8kNcg.woff') format('woff');
 }
 @font-face {
@@ -42,8 +42,8 @@
   font-style: normal;
   font-weight: 400;
   src: url('http://themes.googleusercontent.com/static/fonts/lato/v6/nQhiC-wSiJx0pvEuJl8d8A.eot');
-  src: local('Lato Regular'), local('Lato-Regular'), 
-       url('http://themes.googleusercontent.com/static/fonts/lato/v6/nQhiC-wSiJx0pvEuJl8d8A.eot') format('embedded-opentype'), 
+  src: local('Lato Regular'), local('Lato-Regular'),
+       url('http://themes.googleusercontent.com/static/fonts/lato/v6/nQhiC-wSiJx0pvEuJl8d8A.eot') format('embedded-opentype'),
        url('http://themes.googleusercontent.com/static/fonts/lato/v6/9k-RPmcnxYEPm8CNFsH2gg.woff') format('woff'),
        url('http://themes.googleusercontent.com/static/fonts/lato/v6/v0SdcGFAl2aezM9Vq_aFTQ.ttf') format('truetype');
 }
@@ -52,8 +52,8 @@
   font-style: normal;
   font-weight: 700;
   src: url('http://themes.googleusercontent.com/static/fonts/lato/v6/sBtfDPlEIwvKKU53nAG7AQ.eot');
-  src: local('Lato Bold'), local('Lato-Bold'), 
-       url('http://themes.googleusercontent.com/static/fonts/lato/v6/sBtfDPlEIwvKKU53nAG7AQ.eot') format('embedded-opentype'), 
+  src: local('Lato Bold'), local('Lato-Bold'),
+       url('http://themes.googleusercontent.com/static/fonts/lato/v6/sBtfDPlEIwvKKU53nAG7AQ.eot') format('embedded-opentype'),
        url('http://themes.googleusercontent.com/static/fonts/lato/v6/wkfQbvfT_02e2IWO3yYueQ.woff') format('woff'),
        url('http://themes.googleusercontent.com/static/fonts/lato/v6/DvlFBScY1r-FMtZSYIYoYw.ttf') format('truetype');
 }
app/assets/stylesheets/less/_yobiUI.less
--- app/assets/stylesheets/less/_yobiUI.less
+++ app/assets/stylesheets/less/_yobiUI.less
@@ -38,10 +38,10 @@
 input[type="search"], input[type="tel"], input[type="color"], .uneditable-input {
     .box-shadow(none);
     .border-radius(2px);
-    
+
     &:focus {
         .box-shadow(none);
-        border-color:@primary;        
+        border-color:@primary;
     }
 }
 
@@ -76,13 +76,13 @@
         float:right; margin:0;
         padding:4px 9px;
         border-left:1px solid rgba(0,0,0,0.1);
-        
+
         .caret {
             border-top-color:#4f4f4f;
         }
         &.nlb { border-left:none; }
     }
-    
+
     &.blue {
         background:@blue2; border-bottom:1px solid rgba(0,0,0,0.25);
         .d-caret .caret { border-top-color:#fff; }
@@ -99,7 +99,7 @@
 }
 .btn-group.open .btn.dropdown-toggle {
     background:darken(@white, 5%);
-    
+
     &.blue   { background:darken(@blue2, 5%); }
     &.orange { background:darken(@orange, 5%); }
 }
@@ -179,10 +179,10 @@
         text-decoration: none;
     }
     &.last  { margin-right:0; }
-    &.active { 
-        .box-shadow(inset 1px 1px 4px rgba(0, 0, 0, 0.25)); 
+    &.active {
+        .box-shadow(inset 1px 1px 4px rgba(0, 0, 0, 0.25));
     }
-    
+
     &.blue {
         background-color: @blue2; /*#56B5D9*/
         &:hover { background-color: darken(@blue2, 10%); color: #00ddff; }
@@ -203,12 +203,12 @@
       background-color: @green;
       &:hover { background-color: darken(@green, 10%); color: #00ddff; }
     }
-    
+
     &.red {
         background-color:#e45642;
         &:hover { background-color: darken(#e45642, 10%); color: #fff; }
     }
-    
+
     &.mint {
         background-color:#83d6df;
         &:hover { background-color: darken(#83d6df, 10%); color: #fff; }
@@ -308,10 +308,10 @@
     font-size:11px; font-weight:bold;
     color:#fff; white-space:nowrap; vertical-align:middle;
     background:#aaa;/*d9d9d9;*/
-    
+
     .border-radius(2px);
     /*.box-shadow(inset 0px -2px 2px rgba(255,255,255,0.4));*/
-    
+
     /*&.language { background:#ffc48c; }
     &.license  { background:#ff9f80; }*/
 }
@@ -419,9 +419,9 @@
                 border:1px solid #d3d3d3;
                 text-decoration: none;
                 background-color: @yobi-white-dark;
-            }    
+            }
         }
-        
+
         &.active a {
             font-weight:bold;
             letter-spacing:-1pt;
@@ -520,7 +520,7 @@
 .num-noti {
     display: inline-block;
     background: @primary;
-    color:#fff; 
+    color:#fff;
     font-weight:bold;
     border:1px solid #eee;
     padding: 0px 5px;
@@ -549,7 +549,7 @@
     white-space:nowrap;
     color: #333;
     background-color: @yobi-btn-default;
-    text-shadow:none;   
+    text-shadow:none;
     .border-radius(3px)  !important;
     display:inline-block;
     padding: 4px 12px !important;
@@ -564,7 +564,7 @@
     margin-left: .3em;
     border: 1px solid rgba(0,0,0,.15);
     .box-shadow(0 1px 0 rgba(0,0,0,.05));
-    
+
     i { line-height:20px;}
 
     &.ybnt-midium {
@@ -573,7 +573,7 @@
 
     &:first-child {
         margin-left:0;
-    } 
+    }
 
     &:hover, &:focus, &:active, &:focus, &.disabled, &[disabled]  {
         border:1px solid rgba(0,0,0,.25);
@@ -628,25 +628,25 @@
     &.ybtn-gray {
         backgroun-color: @yobi-white-dark;
 
-        &:hover, &:focus, &:active, &:focus { 
-            background-color: @yobi-white !important;  
+        &:hover, &:focus, &:active, &:focus {
+            background-color: @yobi-white !important;
         }
     }
 
     &.ybtn-primary {
         background-color : @yobi-btn-primary !important;
-        border:1px solid @yobi-btn-primary-hover;   
-        &:hover, &:focus, &:active, &:focus { 
-            background-color: @yobi-btn-primary-hover !important;  
+        border:1px solid @yobi-btn-primary-hover;
+        &:hover, &:focus, &:active, &:focus {
+            background-color: @yobi-btn-primary-hover !important;
         }
     }
 
     &.ybtn-success {
         background-color : @yobi-btn-primary !important;
-        border:1px solid @yobi-btn-primary-hover; 
+        border:1px solid @yobi-btn-primary-hover;
 
-        &:hover, &:focus, &:active, &:focus { 
-            background-color: @yobi-btn-primary-hover !important;  
+        &:hover, &:focus, &:active, &:focus {
+            background-color: @yobi-btn-primary-hover !important;
         }
     }
 
@@ -654,8 +654,8 @@
         background-color : @yobi-btn-warning !important;
         border:1px solid @yobi-btn-warning-hover;
 
-        &:hover, &:focus { 
-            background-color: @yobi-btn-warning-hover !important;  
+        &:hover, &:focus {
+            background-color: @yobi-btn-warning-hover !important;
         }
     }
 
@@ -663,17 +663,17 @@
         background-color : @yobi-btn-info !important;
         border:1px solid @yobi-btn-info-hover;
 
-        &:hover, &:focus { 
-            background-color: @yobi-btn-info-hover !important;  
+        &:hover, &:focus {
+            background-color: @yobi-btn-info-hover !important;
         }
     }
 
     &.ybtn-danger {
         background-color : @yobi-btn-danger !important;
         border:1px solid @yobi-btn-danger-hover;
-    
-        &:hover, &:focus { 
-            background-color: @yobi-btn-danger-hover !important;  
+
+        &:hover, &:focus {
+            background-color: @yobi-btn-danger-hover !important;
         }
     }
 
@@ -681,15 +681,15 @@
         background-color : @yobi-btn-inverse !important;
         border:1px solid @yobi-btn-inverse-hover;
 
-        &:hover, &:focus { 
-            background-color: @yobi-btn-inverse-hover !important;  
+        &:hover, &:focus {
+            background-color: @yobi-btn-inverse-hover !important;
         }
     }
 
     &.ybtn-transparent {
         background-color : rgba(0,0,0, 0.25);
-        
-        &:hover, &:focus { 
+
+        &:hover, &:focus {
             background-color: rgba(0,0,0, 0.45);
         }
     }
@@ -699,8 +699,8 @@
         border:none;
         color:#FFF;
 
-        &:hover, &:focus { 
-            background-color: @yobi-btn-disabled-hover !important;  
+        &:hover, &:focus {
+            background-color: @yobi-btn-disabled-hover !important;
         }
     }
 
@@ -708,17 +708,17 @@
         background-color : @yobi-btn-success !important;
         border:1px solid @yobi-btn-success-hover;
 
-        &:hover, &:focus { 
-            background-color: @yobi-btn-success-hover !important;  
+        &:hover, &:focus {
+            background-color: @yobi-btn-success-hover !important;
         }
     }
 
     &.ybtn-unwatching {
         background-color : @yobi-btn-disabled !important;
         border:none;
-        
-        &:hover, &:focus { 
-            background-color:  !important;  
+
+        &:hover, &:focus {
+            background-color:  !important;
         }
     }
 
@@ -878,7 +878,7 @@
                     padding-top: 5px;
                 }
             }
-               
+
             &.active, &:selected {
                 > a {
                     background: rgba(255,255,255,0.25);
@@ -897,7 +897,7 @@
               padding-left: 11px;
               padding-right: 11px;
             }
-            
+
             &.divider {
                 margin-left: 11px;
                 margin-right: 11px;
@@ -915,14 +915,14 @@
                    margin-top: 0px;
                 }
             }
-            
+
             > a {
                 .border-radius(3px);
                 color:#292929;
                 padding: 3px 20px 5px;
                 background-color:transparent !important;
                 .transition(all 0.2s ease);
-            
+
 
                 &:hover, &:active, &:focus {
                     .border-radius(3px) !important;
@@ -941,7 +941,7 @@
                     height:auto;
                 }
             }
-           
+
             .disabled {
                 color:#ccc;
                 font-size:0.8em;
@@ -1004,9 +1004,9 @@
  * http://www.apache.org/licenses/LICENSE-2.0
  * ============================================================ */
 /**
- * Flat UI Free 
+ * Flat UI Free
  * licensed under a CC BY 3.0 and MIT License
- * 
+ *
  * http://creativecommons.org/licenses/by/3.0/
  * http://opensource.org/licenses/mit-license.html
  */
@@ -1150,7 +1150,7 @@
     .border-radius(3px);
     line-height:20px;
     display:inline-block;
-    
+
     .textbox {
         border:0 none;
         height: 20px;
app/controllers/AbstractPostingApp.java
--- app/controllers/AbstractPostingApp.java
+++ app/controllers/AbstractPostingApp.java
@@ -63,7 +63,7 @@
         public Set<User> getReceivers();
         public String getMessage();
         public String getUrlToView();
-        
+
     }
 
     protected static abstract class AbstractNotification implements Notification {
@@ -97,7 +97,7 @@
                 public User getSender() {
                     return sender;
                 }
-                
+
                 public String getTitle() {
                     return title;
                 }
@@ -201,11 +201,11 @@
         try {
             email.setFrom(Config.getEmailFromSmtp(), noti.getSender().name);
             email.addTo(Config.getEmailFromSmtp(), "Yobi");
-            
+
             for (User receiver : receivers) {
                 email.addBcc(receiver.email, receiver.name);
             }
-            
+
             email.setSubject(noti.getTitle());
             email.setHtmlMsg(noti.getHtmlMessage());
             email.setTextMsg(noti.getPlainMessage());
@@ -240,9 +240,9 @@
         // XHR 호출에 의한 경우라면 204 No Content 와 Location 헤더로 응답한다
         if(HttpUtil.isRequestedWithXHR(request())){
             response().setHeader("Location", redirectTo.absoluteURL(request()));
-            return status(204);            
+            return status(204);
         }
-        
+
         return redirect(redirectTo);
     }
 
app/controllers/BoardApp.java
--- app/controllers/BoardApp.java
+++ app/controllers/BoardApp.java
@@ -130,14 +130,14 @@
         if (postForm.hasErrors()) {
             boolean isAllowedToNotice = ProjectUser.isAllowedToNotice(UserApp.currentUser(), project);
             return badRequest(create.render("error.validation", postForm, project, isAllowedToNotice));
-        }  
+        }
 
         final Posting post = postForm.get();
         post.createdDate = JodaDateUtil.now();
         post.updatedDate = JodaDateUtil.now();
         post.setAuthor(UserApp.currentUser());
         post.project = project;
-        
+
         post.save();
 
         // Attach all of the files in the current user's temporary storage.
@@ -265,12 +265,12 @@
         if (project == null) {
             return notFound(ErrorViews.NotFound.render("error.notfound"));
         }
-        
+
         if (postForm.hasErrors()) {
             boolean isAllowedToNotice = ProjectUser.isAllowedToNotice(UserApp.currentUser(), project);
             return badRequest(edit.render("error.validation", postForm, Posting.findByNumber(project, number), number, project, isAllowedToNotice));
         }
-        
+
         final Posting post = postForm.get();
         final Posting original = Posting.findByNumber(project, number);
         Call redirectTo = routes.BoardApp.post(project.owner, project.name, number);
app/controllers/CodeApp.java
--- app/controllers/CodeApp.java
+++ app/controllers/CodeApp.java
@@ -32,7 +32,7 @@
 
     /**
      * 기본 코드 브라우저 표시
-     * 
+     *
      * @param userName 프로젝트 소유자 이름
      * @param projectName 프로젝트 이름
      */
@@ -61,10 +61,10 @@
 
         return redirect(routes.CodeApp.codeBrowserWithBranch(userName, projectName, "HEAD", ""));
     }
-    
+
     /**
      * 브랜치, 파일 경로를 인자로 받는 코드 브라우저 표시
-     * 
+     *
      * @param userName 프로젝트 소유자 이름
      * @param projectName 프로젝트 이름
      * @param branch 브랜치 이름
@@ -84,19 +84,19 @@
 
         List<ObjectNode> recursiveData = new ArrayList<ObjectNode>();
         List<String> branches = repository.getBranches();
-        
+
         /** 해당 경로가 폴더이고 최상위가 아니면, 최상위 경로부터 순서대로 정보를 추가한다 **/
         if(fileInfo.get("type").getTextValue().equals("folder") && !path.equals("")){
             recursiveData.addAll(RepositoryService.getMetaDataFromAncestorDirectories(repository, branch, path));
         }
         recursiveData.add(fileInfo);
-        
+
         return ok(view.render(project, branches, recursiveData, branch, path));
     }
-    
+
     /**
      * AJAX 호출로 지정한 프로젝트 지정한 경로의 정보를 얻고자 할 때 사용된다
-     * 
+     *
      * @param userName 프로젝트 소유자 이름
      * @param projectName 프로젝트 이름
      * @param path 파일 또는 폴더의 경로
@@ -111,10 +111,10 @@
             return notFound();
         }
     }
-    
+
     /**
      * AJAX 호출로 지정한 프로젝트의 특정 브랜치에서 지정한 경로의 정보를 얻고자 할 때 사용된다
-     * 
+     *
      * @param userName 프로젝트 소유자 이름
      * @param projectName 프로젝트 이름
      * @param branch 브랜치 이름
@@ -135,7 +135,7 @@
 
     /**
      * 지정한 프로젝트의 지정한 파일의 원본을 보여준다
-     * 
+     *
      * @param userName
      * @param projectName
      * @param revision
@@ -151,7 +151,7 @@
 
     /**
      * 지정판 프로젝트의 지정한 이미지 파일 원본을 보여준다
-     * 
+     *
      * @param userName
      * @param projectName
      * @param path
@@ -166,8 +166,8 @@
 
     /**
      * 프로젝트의 저장소 URL을 반환하는 함수
-     * 화면에 저장소 URL을 표시하기 위해 사용된다 
-     * 
+     * 화면에 저장소 URL을 표시하기 위해 사용된다
+     *
      * @param ownerName
      * @param projectName
      */
@@ -192,7 +192,7 @@
      * 현재 로그인 된 사용자 정보가 있으면
      * 프로젝트 저장소 URL에 사용자 ID를 포함해서 반환한다
      * 예: protocol://user@host.name/path
-     * 
+     *
      * @param project
      */
     public static String getURLWithLoginId(Project project) {
app/controllers/IssueApp.java
--- app/controllers/IssueApp.java
+++ app/controllers/IssueApp.java
@@ -55,9 +55,9 @@
      * @throws IOException
      */
     public static Result issues(String ownerName, String projectName, String state, String format, int pageNum) throws WriteException, IOException {
-       
+
         String pjax = request().getHeader("X-PJAX");
-        
+
         Project project = ProjectApp.getProject(ownerName, projectName);
         if (project == null) {
             return notFound(ErrorViews.NotFound.render("error.notfound"));
@@ -101,7 +101,7 @@
                 if(HttpUtil.isRequestedWithXHR(request())){ // not pjax but xhr
                     List<Issue> issueList = el.findList();
                     ObjectNode listData = Json.newObject();
-                    
+
                     if(issueList.size() > 0){
                         for (int i = 0; i < Math.min(issueList.size(), 3); i++) {
                             ObjectNode result = Json.newObject();
@@ -112,7 +112,7 @@
                             result.put("state", issue.state.toString());
                             result.put("createdDate", issue.createdDate.toString());
                             result.put("link", routes.IssueApp.issue(project.owner, project.name, issueId).toString());
-                        
+
                             listData.put(issue.id.toString(), result);
                         }
                     }
@@ -333,7 +333,7 @@
         newIssue.project = project;
 
         newIssue.state = State.OPEN;
-        
+
         addLabels(newIssue, request());
         setMilestone(issueForm, newIssue);
 
@@ -447,14 +447,14 @@
         if (project == null) {
             return notFound(ErrorViews.NotFound.render("error.notfound"));
         }
-        
+
         if (issueForm.hasErrors()) {
             return badRequest(edit.render("error.validation", issueForm, Issue.findByNumber(project, number), project));
         }
-        
+
         final Issue issue = issueForm.get();
         setMilestone(issueForm, issue);
-        
+
         final Issue originalIssue = Issue.findByNumber(project, number);
 
         Call redirectTo = routes.IssueApp.issue(project.owner, project.name, number);
@@ -686,7 +686,7 @@
         if (issue.labels == null) {
             issue.labels = new HashSet<IssueLabel>();
         }
-        
+
         Http.MultipartFormData multipart = request.body().asMultipartFormData();
         Map<String, String[]> form;
         if (multipart != null) {
app/controllers/MilestoneApp.java
--- app/controllers/MilestoneApp.java
+++ app/controllers/MilestoneApp.java
@@ -235,9 +235,9 @@
         // XHR 호출에 의한 경우라면 204 No Content 와 Location 헤더로 응답한다
         if(HttpUtil.isRequestedWithXHR(request())){
             response().setHeader("Location", routes.MilestoneApp.milestones(userName, projectName).toString());
-            return status(204);            
+            return status(204);
         }
-        
+
         return redirect(routes.MilestoneApp.milestones(userName, projectName));
     }
 
@@ -306,14 +306,14 @@
             return notFound(ErrorViews.NotFound.render("error.notfound"));
         }
         Milestone milestone = Milestone.findById(id);
-        
+
         if(milestone == null) {
             return notFound(ErrorViews.NotFound.render("error.notfound"));
         }
-        
+
         String paramState = request().getQueryString("state");
         State state = State.getValue(paramState);
-        
+
         return ok(view.render(milestone.title, milestone, project, state));
     }
 }
app/controllers/PlayDAVConfig.java
--- app/controllers/PlayDAVConfig.java
+++ app/controllers/PlayDAVConfig.java
@@ -7,7 +7,7 @@
 public class PlayDAVConfig extends DAVConfig {
     public PlayDAVConfig() {
     }
-    
+
     public String getRepositoryParentPath() {
        return  new File("repo/svn").getAbsolutePath();
     }
app/models/AbstractPosting.java
--- app/models/AbstractPosting.java
+++ app/models/AbstractPosting.java
@@ -46,7 +46,7 @@
     @Constraints.Required
     @Formats.DateTime(pattern = "YYYY/MM/DD/hh/mm/ss")
     public Date createdDate;
-    
+
     @Constraints.Required
     @Formats.DateTime(pattern = "YYYY/MM/DD/hh/mm/ss")
     public Date updatedDate;
@@ -139,8 +139,8 @@
         numOfComments = computeNumOfComments();
         super.update();
     }
-    
-    
+
+
     public void updateNumber() {
         number = increaseNumber();
         super.update();
app/models/CommitComment.java
--- app/models/CommitComment.java
+++ app/models/CommitComment.java
@@ -15,7 +15,7 @@
     public static final Finder<Long, CommitComment> find = new Finder<>(Long.class, CommitComment.class);
 
     public List<CommitComment> replies = new ArrayList<>();
-    
+
     public CommitComment() {
         super();
     }
@@ -87,7 +87,7 @@
      * CommitComment의 groupKey를 반환한다.
      * commitId, path, line정보를 조한한 키가 일치할 경우 동일한 내용에 대한
      * 코멘트로 간주한다.
-     * 
+     *
      * @return
      */
     public String groupKey() {
app/models/NotificationEvent.java
--- app/models/NotificationEvent.java
+++ app/models/NotificationEvent.java
@@ -282,13 +282,13 @@
         notiEvent.newValue = pullRequest.body;
 
         NotificationEvent.add(notiEvent);
-        
+
         return notiEvent;
     }
-        
+
     /**
      * 보낸코드의 상태가 변경되었을때의 알림 설정
-     * 
+     *
      * @param pullRequestCall
      * @param request
      * @param pullRequest
@@ -315,10 +315,10 @@
         notiEvent.newValue = newState.state();
 
         add(notiEvent);
-        
+
         return notiEvent;
     }
-    
+
     /**
      * 보낸 코드의 병합 결과 알림 설정
      * @param sender
@@ -329,7 +329,7 @@
      * @return
      */
     public static NotificationEvent addPullRequestMerge(User sender, PullRequest pullRequest, GitConflicts conflicts, Request request, State state) {
-        
+
         String title = NotificationEvent.formatReplyTitle(pullRequest);
         Resource resource = pullRequest.asResource();
         Set<User> receivers = new HashSet<>();
@@ -347,13 +347,13 @@
         notiEvent.resourceType = resource.getType();
         notiEvent.eventType = EventType.PULL_REQUEST_MERGED;
         notiEvent.newValue = state.state();
-        
+
         if (conflicts != null) {
-            notiEvent.oldValue = StringUtils.join(conflicts.conflictFiles, "\n");        
+            notiEvent.oldValue = StringUtils.join(conflicts.conflictFiles, "\n");
         }
 
         add(notiEvent);
-        
+
         return notiEvent;
     }
 }
app/models/PullRequest.java
--- app/models/PullRequest.java
+++ app/models/PullRequest.java
@@ -92,16 +92,16 @@
     public Date received;
 
     public State state = State.OPEN;
-    
+
     public Boolean isConflict;
     public Boolean isMerging;
-    
+
     @OneToMany(cascade = CascadeType.ALL)
     public List<PullRequestCommit> pullRequestCommits;
-    
+
     @OneToMany(cascade = CascadeType.ALL)
     public List<PullRequestEvent> pullRequestEvents;
-    
+
     /**
      * {@link #fromBranch}의 가장 최근 커밋 ID
      *
@@ -161,7 +161,7 @@
                 ", state=" + state +
                 '}';
     }
-    
+
     public Duration createdAgo() {
         return JodaDateUtil.ago(this.created);
     }
@@ -169,7 +169,7 @@
     public Duration receivedAgo() {
         return JodaDateUtil.ago(this.received);
     }
-    
+
     public boolean isOpen() {
         return this.state == State.OPEN;
     }
@@ -265,7 +265,7 @@
     /**
      * 보내거나 받는 쪽에
      * {@code project} 의 {@code branch} 를 가지고 있는 pull-request 목록 조회
-     * 
+     *
      * 병합(Closed)되지 않은 모든 보낸코드를 조회한다.
      *
      * @param project
@@ -568,7 +568,7 @@
         deleteIssueEvents();
         super.delete();
     }
-    
+
     @Transient
     public String[] getConflictFiles() {
         return StringUtils.split(this.conflictFiles, ",");
@@ -582,7 +582,7 @@
     public List<CommitComment> getCommitComments() {
         return CommitComment.findByCommits(fromProject, pullRequestCommits);
     }
-    
+
     /**
      * 현재 커밋목록을 반환한다.
      * @return
@@ -591,15 +591,15 @@
     public List<PullRequestCommit> getCurrentCommits() {
         return PullRequestCommit.getCurrentCommits(this);
     }
-    
+
     /**
      * pull request의 모든 코멘트 정보를 가져오고 시간순으로 정렬 후 반환한다. (코멘트 + 코드코멘트 + 이벤트 )
-     * 
+     *
      * @return
      */
     @Transient
     public List<TimelineItem> getTimelineComments() {
-        List<CommitComment> commitComment 
+        List<CommitComment> commitComment
                         = computeCommitCommentReplies(getCommitComments());
 
         List<TimelineItem> timelineComments = new ArrayList<>();
@@ -630,10 +630,10 @@
 
     /**
      * 답글목록을 부모글의 필드로 재할당한다.
-     * 
+     *
      * commentGroup은 등록일순으로 오름차순 정렬되어 있는 상태이며
      * 목록의 첫번째 코멘트를 부모글로 판단한다.
-     * 
+     *
      * @param commentGroup
      * @return
      */
@@ -706,7 +706,7 @@
 
     /**
      * 보낸 코드를 병합해보고 결과 정보를 반환한다.
-     * 
+     *
      * @param pullRequest
      * @return
      */
@@ -714,19 +714,19 @@
         final GitConflicts[] conflicts = {null};
         final List<GitCommit> commits = new ArrayList<>();
         final PullRequest pullRequest = this;
-        
+
         GitRepository.cloneAndFetch(pullRequest, new AfterCloneAndFetchOperation() {
             @Override
             public void invoke(CloneAndFetch cloneAndFetch) throws IOException, GitAPIException {
                 Repository clonedRepository = cloneAndFetch.getRepository();
-                
+
                 List<GitCommit> commitList = GitRepository.diffCommits(clonedRepository,
                     cloneAndFetch.getDestFromBranchName(), cloneAndFetch.getDestToBranchName());
 
                 for (GitCommit gitCommit : commitList) {
                     commits.add(gitCommit);
                 }
-                
+
                 GitRepository.checkout(clonedRepository, cloneAndFetch.getDestToBranchName());
 
                 String mergedCommitIdFrom = null;
@@ -746,7 +746,7 @@
                 }
             }
         });
-        
+
         PullRequestMergeResult pullRequestMergeResult = new PullRequestMergeResult();
         pullRequestMergeResult.setGitCommits(commits);
         pullRequestMergeResult.setGitConflicts(conflicts[0]);
@@ -754,16 +754,16 @@
 
         return pullRequestMergeResult;
     }
-    
+
     /**
-     * project/branch와 연관된 보낸코드들의 상태를 병합중으로 수정한다.  
-     * 
+     * project/branch와 연관된 보낸코드들의 상태를 병합중으로 수정한다.
+     *
      * @param project
      * @param branch
      */
     public static void changeStateToMergingRelatedPullRequests(Project project, String branch) {
         List<PullRequest> pullRequests = PullRequest.findRelatedPullRequests(project, branch);
-            
+
         for (PullRequest pullRequest : pullRequests) {
             if (!pullRequest.isClosed()) {
                 pullRequest.startMerge();
app/models/PullRequestCommit.java
--- app/models/PullRequestCommit.java
+++ app/models/PullRequestCommit.java
@@ -15,7 +15,7 @@
 import utils.JodaDateUtil;
 
 /**
- * 
+ *
  * 보낸코드 커밋정보 저장
  */
 @Entity
@@ -24,39 +24,39 @@
     private static final long serialVersionUID = -4343181252386722689L;
 
     public static Finder<Long, PullRequestCommit> find = new Finder<>(Long.class, PullRequestCommit.class);
-    
-    @Id    
+
+    @Id
     public String id;
-    
+
     @ManyToOne
     public PullRequest pullRequest;
-    
+
     public String commitId;
     public Date authorDate;
     public Date created;
     public String commitMessage;
     public String commitShortId;
     public String authorEmail;
-    
+
     @Enumerated(EnumType.STRING)
     public State state;
-    
+
     public String getAuthorEmail() {
         return authorEmail;
     }
-    
+
     public Date getAuthorDate() {
         return authorDate;
     }
-    
+
     public String getCommitMessage() {
         return commitMessage;
     }
-    
+
     public String getCommitId() {
         return commitId;
     }
-    
+
     public String getCommitShortId() {
         return commitShortId;
     }
@@ -66,15 +66,15 @@
     public Date getDate() {
         return created;
     }
-    
+
     public static State getStateByCommitId(PullRequest pullRequest, String commitId) {
         return find.select("state").where().eq("pullRequest", pullRequest).eq("commitId", commitId).findUnique().state;
     }
-    
+
     public static PullRequestCommit findById(String id) {
         return find.byId(Long.parseLong(id));
     }
-    
+
     public static List<PullRequestCommit> getCurrentCommits(PullRequest pullRequest) {
         return find.where().eq("pullRequest", pullRequest).eq("state", State.CURRENT).findList();
     }
@@ -82,7 +82,7 @@
     public static List<PullRequestCommit> getPriorCommits(PullRequest pullRequest) {
         return find.where().eq("pullRequest", pullRequest).eq("state", State.PRIOR).findList();
     }
-        
+
     public static PullRequestCommit bindPullRequestCommit(GitCommit commit, PullRequest pullRequest) {
         PullRequestCommit pullRequestCommit = new PullRequestCommit();
         pullRequestCommit.commitId = commit.getId();
@@ -90,10 +90,10 @@
         pullRequestCommit.commitMessage = commit.getMessage();
         pullRequestCommit.authorEmail = commit.getAuthorEmail();
         pullRequestCommit.authorDate = commit.getAuthorDate();
-        pullRequestCommit.created = JodaDateUtil.now(); 
+        pullRequestCommit.created = JodaDateUtil.now();
         pullRequestCommit.state = PullRequestCommit.State.CURRENT;
         pullRequestCommit.pullRequest = pullRequest;
-        
+
         return pullRequestCommit;
     }
     public enum State {
app/models/PullRequestEvent.java
--- app/models/PullRequestEvent.java
+++ app/models/PullRequestEvent.java
@@ -24,28 +24,28 @@
  */
 @Entity
 public class PullRequestEvent extends Model implements TimelineItem {
-    
+
     private static final long serialVersionUID = 1981361242582594128L;
-    public static Finder<Long, PullRequestEvent> finder = new Finder<Long, PullRequestEvent>(Long.class, PullRequestEvent.class); 
-    
+    public static Finder<Long, PullRequestEvent> finder = new Finder<Long, PullRequestEvent>(Long.class, PullRequestEvent.class);
+
     @Id
     public Long id;
     public String senderLoginId;
-    
+
     @ManyToOne
     public PullRequest pullRequest;
-    
+
     @Enumerated(EnumType.STRING)
     public EventType eventType;
-    
+
     public Date created;
-    
+
     public String oldValue;
     public String newValue;
-    
+