... | ... |
@@ -40,7 +40,7 @@ sub branch_status { |
40 | 40 |
|
41 | 41 |
# Branch status |
42 | 42 |
my $status = {ahead => 0, behind => 0}; |
43 |
- my @cmd = $self->cmd_remote( |
|
43 |
+ my @cmd = $self->cmd( |
|
44 | 44 |
$user, |
45 | 45 |
$project, |
46 | 46 |
'rev-list', |
... | ... |
@@ -65,7 +65,7 @@ sub no_merged_branch_h { |
65 | 65 |
{ |
66 | 66 |
my $rep = $self->rep($user, $project); |
67 | 67 |
|
68 |
- my @cmd = $self->cmd_remote($user, $project, 'branch', '--no-merged'); |
|
68 |
+ my @cmd = $self->cmd($user, $project, 'branch', '--no-merged'); |
|
69 | 69 |
open my $fh, '-|', @cmd or return; |
70 | 70 |
my @lines = <$fh>; |
71 | 71 |
for my $branch_name (@lines) { |
... | ... |
@@ -84,7 +84,7 @@ sub branches { |
84 | 84 |
my ($self, $user, $project) = @_; |
85 | 85 |
|
86 | 86 |
# Branches |
87 |
- my @cmd = $self->cmd_remote($user, $project, 'branch'); |
|
87 |
+ my @cmd = $self->cmd($user, $project, 'branch'); |
|
88 | 88 |
open my $fh, '-|', @cmd or return; |
89 | 89 |
my $branches = []; |
90 | 90 |
my $start; |
... | ... |
@@ -114,7 +114,7 @@ sub branches_count { |
114 | 114 |
my ($self, $user, $project) = @_; |
115 | 115 |
|
116 | 116 |
# Branches count |
117 |
- my @cmd = $self->cmd_remote($user, $project, 'branch'); |
|
117 |
+ my @cmd = $self->cmd($user, $project, 'branch'); |
|
118 | 118 |
open my $fh, '-|', @cmd or return; |
119 | 119 |
my @branches = <$fh>; |
120 | 120 |
my $branches_count = @branches; |
... | ... |
@@ -122,27 +122,42 @@ sub branches_count { |
122 | 122 |
return $branches_count; |
123 | 123 |
} |
124 | 124 |
|
125 |
-sub cmd_remote { |
|
125 |
+sub cmd { |
|
126 | 126 |
my ($self, $user, $project, @cmd) = @_; |
127 | 127 |
|
128 | 128 |
# Git command |
129 | 129 |
my $home = $self->rep_home; |
130 | 130 |
my $rep = "$home/$user/$project.git"; |
131 | 131 |
|
132 |
- return $self->cmd_remote_dir($rep, @cmd); |
|
132 |
+ return $self->cmd_dir($rep, @cmd); |
|
133 | 133 |
} |
134 | 134 |
|
135 |
-sub cmd_remote_dir { |
|
136 |
- my ($self, $rep, @cmd) = @_; |
|
135 |
+sub cmd_dir { |
|
136 |
+ my ($self, $dir, @cmd) = @_; |
|
137 | 137 |
|
138 |
- return ($self->bin, "--git-dir=$rep", @cmd); |
|
138 |
+ return ($self->bin, "--git-dir=$dir", @cmd); |
|
139 |
+} |
|
140 |
+ |
|
141 |
+sub cmd_working { |
|
142 |
+ my ($self, $user, $project, @cmd) = @_; |
|
143 |
+ |
|
144 |
+ # Git command |
|
145 |
+ my $working_dir = $self->home->rel_file("/data/work/$user/$project"); |
|
146 |
+ |
|
147 |
+ return $self->cmd_working_dir($working_dir, @cmd); |
|
148 |
+} |
|
149 |
+ |
|
150 |
+sub cmd_working_dir { |
|
151 |
+ my ($self, $dir, @cmd) = @_; |
|
152 |
+ |
|
153 |
+ return ($self->bin, "--git-dir=$dir", "--work-tree=$dir", @cmd); |
|
139 | 154 |
} |
140 | 155 |
|
141 | 156 |
sub authors { |
142 | 157 |
my ($self, $user, $project, $rev, $file) = @_; |
143 | 158 |
|
144 | 159 |
# Authors |
145 |
- my @cmd = $self->cmd_remote( |
|
160 |
+ my @cmd = $self->cmd( |
|
146 | 161 |
$user, |
147 | 162 |
$project, |
148 | 163 |
'log', |
... | ... |
@@ -172,7 +187,7 @@ sub blame { |
172 | 187 |
or croak 'Cannot find file'; |
173 | 188 |
|
174 | 189 |
# Git blame |
175 |
- my @cmd = $self->cmd_remote( |
|
190 |
+ my @cmd = $self->cmd( |
|
176 | 191 |
$user, |
177 | 192 |
$project, |
178 | 193 |
'blame', |
... | ... |
@@ -271,7 +286,7 @@ sub blob { |
271 | 286 |
# Blob |
272 | 287 |
my $hash = $self->path_to_hash($user, $project, $rev, $file, 'blob') |
273 | 288 |
or croak 'Cannot find file'; |
274 |
- my @cmd = $self->cmd_remote( |
|
289 |
+ my @cmd = $self->cmd( |
|
275 | 290 |
$user, |
276 | 291 |
$project, |
277 | 292 |
'cat-file', |
... | ... |
@@ -303,7 +318,7 @@ sub blob_diffs { |
303 | 318 |
return unless defined $rev1 && defined $rev2; |
304 | 319 |
|
305 | 320 |
# Diff tree |
306 |
- my @cmd = $self->cmd_remote( |
|
321 |
+ my @cmd = $self->cmd( |
|
307 | 322 |
$user, |
308 | 323 |
$project, |
309 | 324 |
'diff-tree', |
... | ... |
@@ -341,7 +356,7 @@ sub blob_diffs { |
341 | 356 |
my $file = $diffinfo->{to_file}; |
342 | 357 |
|
343 | 358 |
# Blob diff |
344 |
- my @cmd = $self->cmd_remote( |
|
359 |
+ my @cmd = $self->cmd( |
|
345 | 360 |
$user, |
346 | 361 |
$project, |
347 | 362 |
'diff-tree', |
... | ... |
@@ -404,7 +419,7 @@ sub blob_mime_type { |
404 | 419 |
# Blob |
405 | 420 |
my $hash = $self->path_to_hash($user, $project, $rev, $file, 'blob') |
406 | 421 |
or croak 'Cannot find file'; |
407 |
- my @cmd = $self->cmd_remote( |
|
422 |
+ my @cmd = $self->cmd( |
|
408 | 423 |
$user, |
409 | 424 |
$project, |
410 | 425 |
'cat-file', |
... | ... |
@@ -449,7 +464,7 @@ sub blob_mode { |
449 | 464 |
|
450 | 465 |
# Blob mode |
451 | 466 |
$file =~ s#/+$##; |
452 |
- my @cmd = $self->cmd_remote( |
|
467 |
+ my @cmd = $self->cmd( |
|
453 | 468 |
$user, |
454 | 469 |
$project, |
455 | 470 |
'ls-tree', |
... | ... |
@@ -471,7 +486,7 @@ sub blob_raw { |
471 | 486 |
my ($self, $user, $project, $rev, $path) = @_; |
472 | 487 |
|
473 | 488 |
# Blob raw |
474 |
- my @cmd = $self->cmd_remote($user, $project, 'cat-file', 'blob', "$rev:$path"); |
|
489 |
+ my @cmd = $self->cmd($user, $project, 'cat-file', 'blob', "$rev:$path"); |
|
475 | 490 |
open my $fh, "-|", @cmd |
476 | 491 |
or croak 500, "Open git-cat-file failed"; |
477 | 492 |
local $/; |
... | ... |
@@ -486,7 +501,7 @@ sub blob_size { |
486 | 501 |
my ($self, $user, $project, $rev, $file) = @_; |
487 | 502 |
|
488 | 503 |
# Blob size(KB) |
489 |
- my @cmd = $self->cmd_remote( |
|
504 |
+ my @cmd = $self->cmd( |
|
490 | 505 |
$user, |
491 | 506 |
$project, |
492 | 507 |
'cat-file', |
... | ... |
@@ -520,7 +535,7 @@ sub commits_number { |
520 | 535 |
my ($self, $user, $project, $ref) = @_; |
521 | 536 |
|
522 | 537 |
# Command "git diff-tree" |
523 |
- my @cmd = $self->cmd_remote($user, $project, 'shortlog', '-s', $ref); |
|
538 |
+ my @cmd = $self->cmd($user, $project, 'shortlog', '-s', $ref); |
|
524 | 539 |
open my $fh, "-|", @cmd |
525 | 540 |
or croak 500, "Open git-shortlog failed"; |
526 | 541 |
my @commits_infos = <$fh>; |
... | ... |
@@ -542,7 +557,7 @@ sub exists_branch { |
542 | 557 |
|
543 | 558 |
# Exists branch |
544 | 559 |
my $home = $self->rep_home; |
545 |
- my @cmd = $self->cmd_remote($user, $project, 'branch'); |
|
560 |
+ my @cmd = $self->cmd($user, $project, 'branch'); |
|
546 | 561 |
open my $fh, "-|", @cmd |
547 | 562 |
or croak 'git branch failed'; |
548 | 563 |
local $/; |
... | ... |
@@ -564,7 +579,7 @@ sub delete_branch { |
564 | 579 |
} |
565 | 580 |
|
566 | 581 |
if ($exists) { |
567 |
- my @cmd = $self->cmd_remote($user, $project, 'branch', '-D', $branch); |
|
582 |
+ my @cmd = $self->cmd($user, $project, 'branch', '-D', $branch); |
|
568 | 583 |
Gitprep::Util::run_command(@cmd) |
569 | 584 |
or croak "Branch deleting failed. Can't delete branch $branch"; |
570 | 585 |
} |
... | ... |
@@ -606,7 +621,7 @@ sub diff_tree { |
606 | 621 |
$parent = '--root' unless defined $parent; |
607 | 622 |
|
608 | 623 |
# Get diff tree |
609 |
- my @cmd = $self->cmd_remote( |
|
624 |
+ my @cmd = $self->cmd( |
|
610 | 625 |
$user, |
611 | 626 |
$project, |
612 | 627 |
"diff-tree", |
... | ... |
@@ -697,7 +712,7 @@ sub forward_commits { |
697 | 712 |
my ($self, $user, $project, $rev1, $rev2) = @_; |
698 | 713 |
|
699 | 714 |
# Forwarding commits |
700 |
- my @cmd = $self->cmd_remote( |
|
715 |
+ my @cmd = $self->cmd( |
|
701 | 716 |
$user, |
702 | 717 |
$project, |
703 | 718 |
'rev-list', |
... | ... |
@@ -723,7 +738,7 @@ sub path_to_hash { |
723 | 738 |
|
724 | 739 |
# Get blob id or tree id (command "git ls-tree") |
725 | 740 |
$path =~ s#/+$##; |
726 |
- my @cmd = $self->cmd_remote( |
|
741 |
+ my @cmd = $self->cmd( |
|
727 | 742 |
$user, |
728 | 743 |
$project, |
729 | 744 |
'ls-tree', |
... | ... |
@@ -748,7 +763,7 @@ sub last_activity { |
748 | 763 |
my ($self, $user, $project) = @_; |
749 | 764 |
|
750 | 765 |
# Command "git for-each-ref" |
751 |
- my @cmd = $self->cmd_remote( |
|
766 |
+ my @cmd = $self->cmd( |
|
752 | 767 |
$user, |
753 | 768 |
$project, |
754 | 769 |
'for-each-ref', |
... | ... |
@@ -775,7 +790,7 @@ sub last_activity { |
775 | 790 |
sub no_merged_branches_count { |
776 | 791 |
my ($self, $user, $project) = @_; |
777 | 792 |
|
778 |
- my @cmd = $self->cmd_remote($user, $project, 'branch', '--no-merged'); |
|
793 |
+ my @cmd = $self->cmd($user, $project, 'branch', '--no-merged'); |
|
779 | 794 |
open my $fh, '-|', @cmd or return; |
780 | 795 |
my @branches = <$fh>; |
781 | 796 |
my $branches_count = @branches; |
... | ... |
@@ -790,7 +805,7 @@ sub path_by_id { |
790 | 805 |
return unless $hash; |
791 | 806 |
|
792 | 807 |
# Command "git ls-tree" |
793 |
- my @cmd = $self->cmd_remote($user, $project, 'ls-tree', '-r', '-t', '-z', $base); |
|
808 |
+ my @cmd = $self->cmd($user, $project, 'ls-tree', '-r', '-t', '-z', $base); |
|
794 | 809 |
open my $fh, '-|', @cmd or return; |
795 | 810 |
|
796 | 811 |
# Get path |
... | ... |
@@ -814,7 +829,7 @@ sub parse_rev_path { |
814 | 829 |
my ($self, $user, $project, $rev_path) = @_; |
815 | 830 |
|
816 | 831 |
# References |
817 |
- my @cmd = $self->cmd_remote( |
|
832 |
+ my @cmd = $self->cmd( |
|
818 | 833 |
$user, |
819 | 834 |
$project, |
820 | 835 |
'show-ref', |
... | ... |
@@ -864,7 +879,7 @@ sub object_type { |
864 | 879 |
my ($self, $user, $project, $rev) = @_; |
865 | 880 |
|
866 | 881 |
# Get object type |
867 |
- my @cmd = $self->cmd_remote( |
|
882 |
+ my @cmd = $self->cmd( |
|
868 | 883 |
$user, |
869 | 884 |
$project, |
870 | 885 |
'cat-file', |
... | ... |
@@ -929,7 +944,7 @@ sub references { |
929 | 944 |
$type ||= ''; |
930 | 945 |
|
931 | 946 |
# Branches or tags |
932 |
- my @cmd = $self->cmd_remote( |
|
947 |
+ my @cmd = $self->cmd( |
|
933 | 948 |
$user, |
934 | 949 |
$project, |
935 | 950 |
'show-ref', |
... | ... |
@@ -997,7 +1012,7 @@ sub tags_count { |
997 | 1012 |
my $limit = 1000; |
998 | 1013 |
|
999 | 1014 |
# Get tags |
1000 |
- my @cmd = $self->cmd_remote( |
|
1015 |
+ my @cmd = $self->cmd( |
|
1001 | 1016 |
$user, |
1002 | 1017 |
$project, |
1003 | 1018 |
'for-each-ref', |
... | ... |
@@ -1020,7 +1035,7 @@ sub tags { |
1020 | 1035 |
$offset ||= 0; |
1021 | 1036 |
|
1022 | 1037 |
# Get tags |
1023 |
- my @cmd = $self->cmd_remote( |
|
1038 |
+ my @cmd = $self->cmd( |
|
1024 | 1039 |
$user, |
1025 | 1040 |
$project, |
1026 | 1041 |
'for-each-ref', |
... | ... |
@@ -1109,7 +1124,7 @@ sub last_change_commit { |
1109 | 1124 |
my $commit_log = {}; |
1110 | 1125 |
$file = '' unless defined $file; |
1111 | 1126 |
|
1112 |
- my @cmd = $self->cmd_remote( |
|
1127 |
+ my @cmd = $self->cmd( |
|
1113 | 1128 |
$user, |
1114 | 1129 |
$project, |
1115 | 1130 |
'--no-pager', |
... | ... |
@@ -1221,7 +1236,7 @@ sub get_commit { |
1221 | 1236 |
my ($self, $user, $project, $id) = @_; |
1222 | 1237 |
|
1223 | 1238 |
# Git rev-list |
1224 |
- my @cmd = $self->cmd_remote( |
|
1239 |
+ my @cmd = $self->cmd( |
|
1225 | 1240 |
$user, |
1226 | 1241 |
$project, |
1227 | 1242 |
'rev-list', |
... | ... |
@@ -1356,7 +1371,7 @@ sub get_commits { |
1356 | 1371 |
# Get Commits |
1357 | 1372 |
$maxcount ||= 1; |
1358 | 1373 |
$skip ||= 0; |
1359 |
- my @cmd = $self->cmd_remote( |
|
1374 |
+ my @cmd = $self->cmd( |
|
1360 | 1375 |
$user, |
1361 | 1376 |
$project, |
1362 | 1377 |
'rev-list', |
... | ... |
@@ -1493,7 +1508,7 @@ sub import_branch { |
1493 | 1508 |
|
1494 | 1509 |
# Git pull |
1495 | 1510 |
my $remote_rep = $self->rep($remote_user, $remote_project); |
1496 |
- my @cmd = $self->cmd_remote( |
|
1511 |
+ my @cmd = $self->cmd( |
|
1497 | 1512 |
$user, |
1498 | 1513 |
$project, |
1499 | 1514 |
'fetch', |
... | ... |
@@ -1533,7 +1548,7 @@ sub separated_commit { |
1533 | 1548 |
my ($self, $user, $project, $rev1, $rev2) = @_; |
1534 | 1549 |
|
1535 | 1550 |
# Command "git diff-tree" |
1536 |
- my @cmd = $self->cmd_remote( |
|
1551 |
+ my @cmd = $self->cmd( |
|
1537 | 1552 |
$user, |
1538 | 1553 |
$project, |
1539 | 1554 |
'show-branch', |
... | ... |
@@ -1618,7 +1633,7 @@ sub trees { |
1618 | 1633 |
} |
1619 | 1634 |
my @entries = (); |
1620 | 1635 |
my $show_sizes = 0; |
1621 |
- my @cmd = $self->cmd_remote( |
|
1636 |
+ my @cmd = $self->cmd( |
|
1622 | 1637 |
$user, |
1623 | 1638 |
$project, |
1624 | 1639 |
'ls-tree', |
... | ... |
@@ -664,7 +664,7 @@ sub _create_rep { |
664 | 664 |
eval { |
665 | 665 |
# Git init |
666 | 666 |
{ |
667 |
- my @git_init_cmd = $git->cmd_remote_dir($rep, 'init', '--bare'); |
|
667 |
+ my @git_init_cmd = $git->cmd_dir($rep, 'init', '--bare'); |
|
668 | 668 |
Gitprep::Util::run_command(@git_init_cmd) |
669 | 669 |
or croak "Can't execute git init --bare:@git_init_cmd"; |
670 | 670 |
} |
... | ... |
@@ -677,7 +677,7 @@ sub _create_rep { |
677 | 677 |
} |
678 | 678 |
|
679 | 679 |
# HTTP support |
680 |
- my @git_update_server_info_cmd = $git->cmd_remote_dir( |
|
680 |
+ my @git_update_server_info_cmd = $git->cmd_dir( |
|
681 | 681 |
$rep, |
682 | 682 |
'--bare', |
683 | 683 |
'update-server-info' |
... | ... |
@@ -710,7 +710,7 @@ sub _create_rep { |
710 | 710 |
or croak "Can't create directory $temp_work: $!"; |
711 | 711 |
|
712 | 712 |
# Git init |
713 |
- my @git_init_cmd = $git->cmd_remote_dir($temp_work, 'init', '-q'); |
|
713 |
+ my @git_init_cmd = $git->cmd_dir($temp_work, 'init', '-q'); |
|
714 | 714 |
Gitprep::Util::run_command(@git_init_cmd) |
715 | 715 |
or croak "Can't execute git init: @git_init_cmd"; |
716 | 716 |
|
... | ... |
@@ -722,9 +722,8 @@ sub _create_rep { |
722 | 722 |
print $readme_fh "\n" . encode('UTF-8', $description) . "\n"; |
723 | 723 |
close $readme_fh; |
724 | 724 |
|
725 |
- my @git_add_cmd = $git->cmd_remote_dir( |
|
725 |
+ my @git_add_cmd = $git->cmd_working_dir( |
|
726 | 726 |
$temp_work, |
727 |
- "--work-tree=$temp_work", |
|
728 | 727 |
'add', |
729 | 728 |
'README.md' |
730 | 729 |
); |
... | ... |
@@ -732,9 +731,8 @@ sub _create_rep { |
732 | 731 |
or croak "Can't execute git add: @git_add_cmd"; |
733 | 732 |
|
734 | 733 |
# Set user name |
735 |
- my @git_config_user_name = $git->cmd_remote_dir( |
|
734 |
+ my @git_config_user_name = $git->cmd_working_dir( |
|
736 | 735 |
$temp_work, |
737 |
- "--work-tree=$temp_work", |
|
738 | 736 |
'config', |
739 | 737 |
'user.name', |
740 | 738 |
$user |
... | ... |
@@ -744,9 +742,8 @@ sub _create_rep { |
744 | 742 |
|
745 | 743 |
# Set user mail |
746 | 744 |
my $user_mail = $self->app->dbi->model('user')->select('mail', where => {id => $user})->value; |
747 |
- my @git_config_user_mail = $git->cmd_remote_dir( |
|
745 |
+ my @git_config_user_mail = $git->cmd_working_dir( |
|
748 | 746 |
$temp_work, |
749 |
- "--work-tree=$temp_work", |
|
750 | 747 |
'config', |
751 | 748 |
'user.email', |
752 | 749 |
"$user_mail" |
... | ... |
@@ -755,9 +752,8 @@ sub _create_rep { |
755 | 752 |
or croak "Can't execute git config: @git_config_user_mail"; |
756 | 753 |
|
757 | 754 |
# Commit |
758 |
- my @git_commit_cmd = $git->cmd_remote_dir( |
|
755 |
+ my @git_commit_cmd = $git->cmd_working_dir( |
|
759 | 756 |
$temp_work, |
760 |
- "--work-tree=$temp_work", |
|
761 | 757 |
'commit', |
762 | 758 |
'-q', |
763 | 759 |
'-m', |
... | ... |
@@ -768,9 +764,8 @@ sub _create_rep { |
768 | 764 |
|
769 | 765 |
# Push |
770 | 766 |
{ |
771 |
- my @git_push_cmd = $git->cmd_remote_dir( |
|
767 |
+ my @git_push_cmd = $git->cmd_working_dir( |
|
772 | 768 |
$temp_work, |
773 |
- "--work-tree=$temp_work", |
|
774 | 769 |
'push', |
775 | 770 |
'-q', |
776 | 771 |
$rep, |
... | ... |
@@ -40,7 +40,7 @@ |
40 | 40 |
); |
41 | 41 |
}; |
42 | 42 |
my $cmd = $quote->( |
43 |
- $git->cmd_remote( |
|
43 |
+ $git->cmd( |
|
44 | 44 |
$user, |
45 | 45 |
$project, |
46 | 46 |
'archive', |
... | ... |
@@ -15,7 +15,7 @@ |
15 | 15 |
substr($service_cmd, 0, 4, ''); |
16 | 16 |
|
17 | 17 |
my $rep = $git->rep($user, $project); |
18 |
- my @cmd = $git->cmd_remote($user, $project, $service_cmd, '--stateless-rpc', '--advertise-refs', $rep); |
|
18 |
+ my @cmd = $git->cmd($user, $project, $service_cmd, '--stateless-rpc', '--advertise-refs', $rep); |
|
19 | 19 |
|
20 | 20 |
my ($cout, $cerr) = (Symbol::gensym, Symbol::gensym); |
21 | 21 |
my $pid = IPC::Open3::open3(my $cin, $cout, $cerr, @cmd ); |
... | ... |
@@ -58,7 +58,7 @@ |
58 | 58 |
# Dumb HTTP |
59 | 59 |
else { |
60 | 60 |
# Update server info |
61 |
- my @cmd = $git->cmd_remote($user, $project, 'update-server-info'); |
|
61 |
+ my @cmd = $git->cmd($user, $project, 'update-server-info'); |
|
62 | 62 |
open my $fh, '-|', @cmd |
63 | 63 |
or die "Can't open pipe for @cmd:$!"; |
64 | 64 |
close $fh |
... | ... |
@@ -10,7 +10,7 @@ |
10 | 10 |
my $git = app->git; |
11 | 11 |
|
12 | 12 |
my $rep_dir = $git->rep($user, $project); |
13 |
- my @cmd = $git->cmd_remote($user, $project, $service, '--stateless-rpc', $rep_dir); |
|
13 |
+ my @cmd = $git->cmd($user, $project, $service, '--stateless-rpc', $rep_dir); |
|
14 | 14 |
|
15 | 15 |
# Command |
16 | 16 |
my ($cout, $cerr) = (Symbol::gensym, Symbol::gensym); |