PageRenderTime 40ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/inc/Module/Install/Repository.pm

https://bitbucket.org/bacek/libdatetime-format-pg-perl
Perl | 88 lines | 68 code | 14 blank | 6 comment | 12 complexity | eb7780df78496a871666064c4c868858 MD5 | raw file
Possible License(s): AGPL-1.0
  1. #line 1
  2. package Module::Install::Repository;
  3. use strict;
  4. use 5.005;
  5. use vars qw($VERSION);
  6. $VERSION = '0.06';
  7. use base qw(Module::Install::Base);
  8. sub _execute {
  9. my ($command) = @_;
  10. `$command`;
  11. }
  12. sub auto_set_repository {
  13. my $self = shift;
  14. return unless $Module::Install::AUTHOR;
  15. my $repo = _find_repo(\&_execute);
  16. if ($repo) {
  17. $self->repository($repo);
  18. } else {
  19. warn "Cannot determine repository URL\n";
  20. }
  21. }
  22. sub _find_repo {
  23. my ($execute) = @_;
  24. if (-e ".git") {
  25. # TODO support remote besides 'origin'?
  26. if ($execute->('git remote show -n origin') =~ /URL: (.*)$/m) {
  27. # XXX Make it public clone URL, but this only works with github
  28. my $git_url = $1;
  29. $git_url =~ s![\w\-]+\@([^:]+):!git://$1/!;
  30. return $git_url;
  31. } elsif ($execute->('git svn info') =~ /URL: (.*)$/m) {
  32. return $1;
  33. }
  34. } elsif (-e ".svn") {
  35. if (`svn info` =~ /URL: (.*)$/m) {
  36. return $1;
  37. }
  38. } elsif (-e "_darcs") {
  39. # defaultrepo is better, but that is more likely to be ssh, not http
  40. if (my $query_repo = `darcs query repo`) {
  41. if ($query_repo =~ m!Default Remote: (http://.+)!) {
  42. return $1;
  43. }
  44. }
  45. open my $handle, '<', '_darcs/prefs/repos' or return;
  46. while (<$handle>) {
  47. chomp;
  48. return $_ if m!^http://!;
  49. }
  50. } elsif (-e ".hg") {
  51. if ($execute->('hg paths') =~ /default = (.*)$/m) {
  52. my $mercurial_url = $1;
  53. $mercurial_url =~ s!^ssh://hg\@(bitbucket\.org/)!https://$1!;
  54. return $mercurial_url;
  55. }
  56. } elsif (-e "$ENV{HOME}/.svk") {
  57. # Is there an explicit way to check if it's an svk checkout?
  58. my $svk_info = `svk info` or return;
  59. SVK_INFO: {
  60. if ($svk_info =~ /Mirrored From: (.*), Rev\./) {
  61. return $1;
  62. }
  63. if ($svk_info =~ m!Merged From: (/mirror/.*), Rev\.!) {
  64. $svk_info = `svk info /$1` or return;
  65. redo SVK_INFO;
  66. }
  67. }
  68. return;
  69. }
  70. }
  71. 1;
  72. __END__
  73. =encoding utf-8
  74. #line 128