Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
remote: set executable bit of an input file based on its real value.
Browse files Browse the repository at this point in the history
The "always mark" was introduced by 3e3b71a which was a workaround for bazelbuild#4751. However, that issue was then fixed by fc44891. There is no reason to keep the workaround which is causing other issues e.g. bazelbuild#12818.
coeuvre committed Jan 13, 2021
1 parent 28fa193 commit 73705e7
Showing 2 changed files with 34 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -20,6 +20,8 @@
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.protobuf.ByteString;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -34,7 +36,7 @@
final class DirectoryTree {

interface Visitor {
void visitDirectory(PathFragment dirname, List<FileNode> files, List<DirectoryNode> dirs);
void visitDirectory(PathFragment dirname, List<FileNode> files, List<DirectoryNode> dirs) throws IOException;
}

abstract static class Node implements Comparable<Node> {
@@ -165,15 +167,15 @@ boolean isEmpty() {
}

/**
* Traverses the {@link ActionInputsTree} in a depth first search manner. The children are visited
* Traverses the {@link DirectoryTree} in a depth first search manner. The children are visited
* in lexographical order.
*/
void visit(Visitor visitor) {
void visit(Visitor visitor) throws IOException {
Preconditions.checkNotNull(visitor, "visitor");
visit(visitor, PathFragment.EMPTY_FRAGMENT);
}

private void visit(Visitor visitor, PathFragment dirname) {
private void visit(Visitor visitor, PathFragment dirname) throws IOException {
DirectoryNode dir = tree.get(dirname);
if (dir == null) {
return;
@@ -198,30 +200,34 @@ private void visit(Visitor visitor, PathFragment dirname) {
@Override
public String toString() {
Map<PathFragment, StringBuilder> m = new HashMap<>();
visit(
(dirname, files, dirs) -> {
int depth = dirname.segmentCount() - 1;
StringBuilder sb = new StringBuilder();

if (!dirname.equals(PathFragment.EMPTY_FRAGMENT)) {
sb.append(Strings.repeat(" ", depth));
sb.append(dirname.getBaseName());
sb.append("\n");
}
if (!files.isEmpty()) {
for (FileNode file : files) {
sb.append(Strings.repeat(" ", depth + 1));
sb.append(formatFile(file));
try {
visit(
(dirname, files, dirs) -> {
int depth = dirname.segmentCount() - 1;
StringBuilder sb = new StringBuilder();

if (!dirname.equals(PathFragment.EMPTY_FRAGMENT)) {
sb.append(Strings.repeat(" ", depth));
sb.append(dirname.getBaseName());
sb.append("\n");
}
}
if (!dirs.isEmpty()) {
for (DirectoryNode dir : dirs) {
sb.append(m.remove(dirname.getRelative(dir.getPathSegment())));
if (!files.isEmpty()) {
for (FileNode file : files) {
sb.append(Strings.repeat(" ", depth + 1));
sb.append(formatFile(file));
sb.append("\n");
}
}
if (!dirs.isEmpty()) {
for (DirectoryNode dir : dirs) {
sb.append(m.remove(dirname.getRelative(dir.getPathSegment())));
}
}
}
m.put(dirname, sb);
});
m.put(dirname, sb);
});
} catch (IOException e) {
return e.toString();
}
return m.get(PathFragment.EMPTY_FRAGMENT).toString();
}

Original file line number Diff line number Diff line change
@@ -157,7 +157,7 @@ public static MerkleTree build(SortedMap<PathFragment, Path> inputFiles, DigestU
}
}

private static MerkleTree build(DirectoryTree tree, DigestUtil digestUtil) {
private static MerkleTree build(DirectoryTree tree, DigestUtil digestUtil) throws IOException {
Preconditions.checkNotNull(tree);
if (tree.isEmpty()) {
return new MerkleTree(
@@ -194,11 +194,11 @@ private static MerkleTree build(DirectoryTree tree, DigestUtil digestUtil) {
digestDirectoryMap, digestPathMap, rootDigest, tree.numFiles(), inputBytes.get());
}

private static FileNode buildProto(DirectoryTree.FileNode file) {
private static FileNode buildProto(DirectoryTree.FileNode file) throws IOException {
return FileNode.newBuilder()
.setName(file.getPathSegment())
.setDigest(file.getDigest())
.setIsExecutable(true)
.setIsExecutable(file.getPath().isExecutable())
.build();
}

0 comments on commit 73705e7

Please sign in to comment.