]> Lady’s Gitweb - Gitweb/blobdiff - gitweb.perl
gitweb: Show submodule entries in the 'tree' view
[Gitweb] / gitweb.perl
index 5939fc6d7cfb28f50980a66ea16ab083d7d00b28bd0658040f012acedbd58b5a..2f2e52fe63c5b13f24061496ba881aaabd1576a702b3fbf3499e2800a4ca2be1 100755 (executable)
@@ -891,11 +891,25 @@ sub age_string {
        return $age_str;
 }
 
+use constant {
+       S_IFINVALID => 0030000,
+       S_IFGITLINK => 0160000,
+};
+
+# submodule/subproject, a commit object reference
+sub S_ISGITLINK($) {
+       my $mode = shift;
+
+       return (($mode & S_IFMT) == S_IFGITLINK)
+}
+
 # convert file mode in octal to symbolic file mode string
 sub mode_str {
        my $mode = oct shift;
 
-       if (S_ISDIR($mode & S_IFMT)) {
+       if (S_ISGITLINK($mode)) {
+               return 'm---------';
+       } elsif (S_ISDIR($mode & S_IFMT)) {
                return 'drwxr-xr-x';
        } elsif (S_ISLNK($mode)) {
                return 'lrwxrwxrwx';
@@ -921,7 +935,9 @@ sub file_type {
                $mode = oct $mode;
        }
 
-       if (S_ISDIR($mode & S_IFMT)) {
+       if (S_ISGITLINK($mode)) {
+               return "submodule";
+       } elsif (S_ISDIR($mode & S_IFMT)) {
                return "directory";
        } elsif (S_ISLNK($mode)) {
                return "symlink";
@@ -942,7 +958,9 @@ sub file_type_long {
                $mode = oct $mode;
        }
 
-       if (S_ISDIR($mode & S_IFMT)) {
+       if (S_ISGITLINK($mode)) {
+               return "submodule";
+       } elsif (S_ISDIR($mode & S_IFMT)) {
                return "directory";
        } elsif (S_ISLNK($mode)) {
                return "symlink";
@@ -2708,6 +2726,20 @@ sub git_print_tree_entry {
                                      "history");
                }
                print "</td>\n";
+       } else {
+               # unknown object: we can only present history for it
+               # (this includes 'commit' object, i.e. submodule support)
+               print "<td class=\"list\">" .
+                     esc_path($t->{'name'}) .
+                     "</td>\n";
+               print "<td class=\"link\">";
+               if (defined $hash_base) {
+                       print $cgi->a({-href => href(action=>"history",
+                                                    hash_base=>$hash_base,
+                                                    file_name=>"$basedir$t->{'name'}")},
+                                     "history");
+               }
+               print "</td>\n";
        }
 }
 
@@ -4344,7 +4376,7 @@ sub git_snapshot {
        my $cmd;
        $filename .= "-$hash$known_snapshot_formats{$format}{'suffix'}";
        $cmd = "$git_command archive " .
-               "--format=$known_snapshot_formats{$format}{'format'}" .
+               "--format=$known_snapshot_formats{$format}{'format'} " .
                "--prefix=\'$name\'/ $hash";
        if (exists $known_snapshot_formats{$format}{'compressor'}) {
                $cmd .= ' | ' . join ' ', @{$known_snapshot_formats{$format}{'compressor'}};
This page took 0.176417 seconds and 4 git commands to generate.