| ... | ... |
@@ -15,6 +15,40 @@ use Gitprep::Util; |
| 15 | 15 |
has 'app'; |
| 16 | 16 |
has 'authorized_keys_file'; |
| 17 | 17 |
|
| 18 |
+sub check_merge_automatical {
|
|
| 19 |
+ my ($self, $rep_info, $branch1, $branch2) = @_; |
|
| 20 |
+ |
|
| 21 |
+ # Create patch |
|
| 22 |
+ my @git_format_patch_cmd = $self->app->git->cmd( |
|
| 23 |
+ $rep_info, |
|
| 24 |
+ 'format-patch', |
|
| 25 |
+ "$branch1..$branch2", |
|
| 26 |
+ "--stdout" |
|
| 27 |
+ ); |
|
| 28 |
+ open my $git_format_patch_fh, '-|', @git_format_patch_cmd |
|
| 29 |
+ or Carp::croak "Can't execute git format-patch: @git_format_patch_cmd"; |
|
| 30 |
+ my $patch_str = do { local $/; <$git_format_patch_fh> };
|
|
| 31 |
+ |
|
| 32 |
+ # Write patch to file |
|
| 33 |
+ my $tmp_dir = File::Temp->newdir(DIR => $self->app->home->rel_file('/tmp'));
|
|
| 34 |
+ my $patch_file = "$tmp_dir/test.patch"; |
|
| 35 |
+ open my $patch_fh, '>', $patch_file |
|
| 36 |
+ or Carp::croak "Can't open patch file $patch_file: $!"; |
|
| 37 |
+ print $patch_fh $patch_str; |
|
| 38 |
+ close $patch_fh; |
|
| 39 |
+ |
|
| 40 |
+ # Check if this patch can be applied |
|
| 41 |
+ my @git_apply_cmd = $self->app->git->cmd( |
|
| 42 |
+ $rep_info, |
|
| 43 |
+ 'apply', |
|
| 44 |
+ $patch_file, |
|
| 45 |
+ '--check' |
|
| 46 |
+ ); |
|
| 47 |
+ my $automatical = Gitprep::Util::run_command(@git_apply_cmd); |
|
| 48 |
+ |
|
| 49 |
+ return $automatical; |
|
| 50 |
+} |
|
| 51 |
+ |
|
| 18 | 52 |
sub create_work_rep {
|
| 19 | 53 |
my ($self, $user, $project) = @_; |
| 20 | 54 |
|
| ... | ... |
@@ -58,7 +58,7 @@ |
| 58 | 58 |
} |
| 59 | 59 |
|
| 60 | 60 |
# Can merge |
| 61 |
- my $can_merge; |
|
| 61 |
+ my $merge_automatical; |
|
| 62 | 62 |
if ($can_open_pull_request) {
|
| 63 | 63 |
|
| 64 | 64 |
# Create working repository if it don't exist |
| ... | ... |
@@ -92,6 +92,12 @@ |
| 92 | 92 |
Gitprep::Util::run_command(@git_reset_hard_cmd) |
| 93 | 93 |
or Carp::croak "Can't execute git reset --hard: @git_reset_hard_cmd"; |
| 94 | 94 |
|
| 95 |
+ # Check merge automatically |
|
| 96 |
+ $merge_automatical = $self->app->manager->check_merge_automatical( |
|
| 97 |
+ app->work_rep_info($user, $project), |
|
| 98 |
+ $gitprep_tmp_branch_name, |
|
| 99 |
+ "origin/$rev" |
|
| 100 |
+ ); |
|
| 95 | 101 |
} |
| 96 | 102 |
|
| 97 | 103 |
layout 'common', title => "Comparing $from_rev...$rev \x{30fb} $user/$project";
|
| ... | ... |
@@ -159,6 +165,12 @@ |
| 159 | 165 |
<button id="compare-branch-btn" class="btn btn-small"> |
| 160 | 166 |
<span>compare:</span> <b><%= $rev %></b><i class="icon-arrow-down"></i> |
| 161 | 167 |
</button> |
| 168 |
+ |
|
| 169 |
+ % if ($merge_automatical) {
|
|
| 170 |
+ <span style="margin-left:10px"> |
|
| 171 |
+ <span style="color:green;font-weight:bold"><%= "\x{2714}" %>Able to merge.</span> These branches can be automatically merged.
|
|
| 172 |
+ </span> |
|
| 173 |
+ % } |
|
| 162 | 174 |
</div> |
| 163 | 175 |
</div> |
| 164 | 176 |
|