aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Michajlo Matijkiw <michajlo@google.com>2015-11-18 18:05:04 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-11-19 10:00:08 +0000
commite4aa435e158c647cd1478216fd1c26d82e969421 (patch)
tree9f2a9248930422d5a264a5161c64c65b4ca53a1b /src
parent0371208ede2b0ddea61dc0bcb3dceb2c19f232ff (diff)
Don't store repeated packageId in targets when serializing package
-- MOS_MIGRATED_REVID=108154410
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java38
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/PackageSerializer.java6
2 files changed, 23 insertions, 21 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java b/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java
index 2a57d5e567..3b57f1d37e 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java
@@ -154,7 +154,7 @@ public class PackageDeserializer {
InputFile inputFile;
try {
inputFile = context.packageBuilder.createInputFile(
- deserializeLabel(sourceFile.getName()).getName(), EmptyLocation.INSTANCE);
+ sourceFile.getName(), EmptyLocation.INSTANCE);
} catch (GeneratedLabelConflict e) {
throw new PackageDeserializationException(e);
}
@@ -175,7 +175,7 @@ public class PackageDeserializer {
try {
context.packageBuilder.addPackageGroup(
- deserializeLabel(packageGroupPb.getName()).getName(),
+ packageGroupPb.getName(),
specifications,
deserializeLabels(packageGroupPb.getIncludedPackageGroupList()),
NullEventHandler.INSTANCE, // TODO(bazel-team): Handle errors properly
@@ -185,8 +185,9 @@ public class PackageDeserializer {
}
}
- private void deserializeRule(DeserializationContext context, Build.Rule rulePb)
- throws PackageDeserializationException, InterruptedException {
+ private void deserializeRule(
+ PackageIdentifier packageId, DeserializationContext context, Build.Rule rulePb)
+ throws PackageDeserializationException, InterruptedException {
Location ruleLocation = EmptyLocation.INSTANCE;
RuleClass ruleClass = packageDeserializationEnvironment.getRuleClass(rulePb, ruleLocation);
Map<String, ParsedAttributeValue> attributeValues = new HashMap<>();
@@ -205,8 +206,8 @@ public class PackageDeserializer {
AttributeContainerWithoutLocation attributeContainer =
new AttributeContainerWithoutLocation(ruleClass, hasher.hash().asBytes());
- Label ruleLabel = deserializeLabel(rulePb.getName());
try {
+ Label ruleLabel = LABEL_INTERNER.intern(Label.create(packageId, rulePb.getName()));
Rule rule = createRuleWithParsedAttributeValues(ruleClass,
ruleLabel, context.packageBuilder, ruleLocation, attributeValues,
NullEventHandler.INSTANCE, attributeContainer);
@@ -371,9 +372,9 @@ public class PackageDeserializer {
* @throws IOException
* @throws InterruptedException
*/
- private void deserializeInternal(Build.Package packagePb, StoredEventHandler eventHandler,
- Package.Builder builder, CodedInputStream codedIn)
- throws PackageDeserializationException, IOException, InterruptedException {
+ private void deserializeInternal(PackageIdentifier packageId, Build.Package packagePb,
+ StoredEventHandler eventHandler, Package.Builder builder, CodedInputStream codedIn)
+ throws PackageDeserializationException, IOException, InterruptedException {
Path buildFile = packageDeserializationEnvironment.getPath(packagePb.getBuildFilePath());
Preconditions.checkNotNull(buildFile);
DeserializationContext context = new DeserializationContext(builder);
@@ -434,11 +435,12 @@ public class PackageDeserializer {
builder.setWorkspaceName(packagePb.getWorkspaceName());
- deserializeTargets(codedIn, context);
+ deserializeTargets(packageId, codedIn, context);
}
- private void deserializeTargets(CodedInputStream codedIn, DeserializationContext context)
- throws IOException, PackageDeserializationException, InterruptedException {
+ private void deserializeTargets(
+ PackageIdentifier packageId, CodedInputStream codedIn, DeserializationContext context)
+ throws IOException, PackageDeserializationException, InterruptedException {
Build.TargetOrTerminator tot;
while (!(tot = readTargetOrTerminator(codedIn)).getIsTerminator()) {
Build.Target target = tot.getTarget();
@@ -450,7 +452,7 @@ public class PackageDeserializer {
deserializePackageGroup(context, target.getPackageGroup());
break;
case RULE:
- deserializeRule(context, target.getRule());
+ deserializeRule(packageId, context, target.getRule());
break;
default:
throw new IllegalStateException("Unexpected Target type: " + target.getType());
@@ -496,17 +498,17 @@ public class PackageDeserializer {
// Read the initial Package message so we have the data to initialize the builder. We will read
// the Targets in individually later.
Build.Package packagePb = readPackageProto(codedIn);
- Package.Builder builder;
+ PackageIdentifier packageId;
try {
- builder = new Package.Builder(
- PackageIdentifier
- .create(packagePb.getRepository(), new PathFragment(packagePb.getName())),
- null);
+ packageId = PackageIdentifier.create(
+ packagePb.getRepository(), new PathFragment(packagePb.getName()));
} catch (LabelSyntaxException e) {
throw new PackageDeserializationException(e);
}
+
+ Package.Builder builder = new Package.Builder(packageId, null);
StoredEventHandler eventHandler = new StoredEventHandler();
- deserializeInternal(packagePb, eventHandler, builder, codedIn);
+ deserializeInternal(packageId, packagePb, eventHandler, builder, codedIn);
builder.addEvents(eventHandler.getEvents());
return builder.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageSerializer.java b/src/main/java/com/google/devtools/build/lib/packages/PackageSerializer.java
index 899651277a..0432071203 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageSerializer.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageSerializer.java
@@ -425,7 +425,7 @@ public class PackageSerializer {
private Build.Target serializeInputFile(InputFile inputFile) {
Build.SourceFile.Builder builder = Build.SourceFile.newBuilder();
- builder.setName(inputFile.getLabel().toString());
+ builder.setName(inputFile.getLabel().getName());
if (inputFile.isVisibilitySpecified()) {
for (Label visibilityLabel : inputFile.getVisibility().getDeclaredLabels()) {
builder.addVisibilityLabel(visibilityLabel.toString());
@@ -444,7 +444,7 @@ public class PackageSerializer {
private Build.Target serializePackageGroup(PackageGroup packageGroup) {
Build.PackageGroup.Builder builder = Build.PackageGroup.newBuilder();
- builder.setName(packageGroup.getLabel().toString());
+ builder.setName(packageGroup.getLabel().getName());
for (PackageSpecification packageSpecification : packageGroup.getPackageSpecifications()) {
builder.addContainedPackage(packageSpecification.toString());
@@ -462,7 +462,7 @@ public class PackageSerializer {
private Build.Target serializeRule(Rule rule) {
Build.Rule.Builder builder = Build.Rule.newBuilder();
- builder.setName(rule.getLabel().toString());
+ builder.setName(rule.getLabel().getName());
builder.setRuleClass(rule.getRuleClass());
builder.setPublicByDefault(rule.getRuleClassObject().isPublicByDefault());
for (Attribute attribute : rule.getAttributes()) {