|
96 | 96 | $mtime = oct $mtime;
|
97 | 97 | next if $typeflag == 5; # directory
|
98 | 98 |
|
99 |
| - print FI "blob\n", "mark :$next_mark\n"; |
100 |
| - if ($typeflag == 2) { # symbolic link |
101 |
| - print FI "data ", length($linkname), "\n", $linkname; |
102 |
| - $mode = 0120000; |
103 |
| - } else { |
104 |
| - print FI "data $size\n"; |
105 |
| - while ($size > 0 && read(I, $_, 512) == 512) { |
106 |
| - print FI substr($_, 0, $size); |
107 |
| - $size -= 512; |
| 99 | + if ($typeflag != 1) { # handle hard links later |
| 100 | + print FI "blob\n", "mark :$next_mark\n"; |
| 101 | + if ($typeflag == 2) { # symbolic link |
| 102 | + print FI "data ", length($linkname), "\n", |
| 103 | + $linkname; |
| 104 | + $mode = 0120000; |
| 105 | + } else { |
| 106 | + print FI "data $size\n"; |
| 107 | + while ($size > 0 && read(I, $_, 512) == 512) { |
| 108 | + print FI substr($_, 0, $size); |
| 109 | + $size -= 512; |
| 110 | + } |
108 | 111 | }
|
| 112 | + print FI "\n"; |
109 | 113 | }
|
110 |
| - print FI "\n"; |
111 | 114 |
|
112 | 115 | my $path;
|
113 | 116 | if ($prefix) {
|
114 | 117 | $path = "$prefix/$name";
|
115 | 118 | } else {
|
116 | 119 | $path = "$name";
|
117 | 120 | }
|
118 |
| - $files{$path} = [$next_mark++, $mode]; |
| 121 | + |
| 122 | + if ($typeflag == 1) { # hard link |
| 123 | + $linkname = "$prefix/$linkname" if $prefix; |
| 124 | + $files{$path} = [ $files{$linkname}->[0], $mode ]; |
| 125 | + } else { |
| 126 | + $files{$path} = [$next_mark++, $mode]; |
| 127 | + } |
119 | 128 |
|
120 | 129 | $author_time = $mtime if $mtime > $author_time;
|
121 | 130 | $path =~ m,^([^/]+)/,;
|
|
0 commit comments