Background and Architectural Context

How Bazaar Works

Bazaar stores history as a series of revisions linked by a directed acyclic graph, supporting both centralized and decentralized workflows. Its flexibility in using different formats (e.g., rich-root, pack-0.92, 2a) impacts performance and interoperability. Plugins extend functionality for CI integration, bug tracking, and foreign VCS bridging (e.g., with Git or Subversion). In large-scale use, repository format choice, branch structure, and plugin compatibility become critical to stability.

Why Rare Issues Arise

  • Repository format mismatches between branches causing merge and fetch errors.
  • Index corruption in large repositories with millions of revisions.
  • Slow operations over WAN due to protocol inefficiencies.
  • Plugin-induced instability when bridging with other VCS systems.

Diagnostic Framework

Step 1: Identify the Scope

  • Local corruption: manifesting as bzr: ERROR: KnitCorrupt or RevisionNotPresent.
  • Network-related: high latency during pull/push.
  • Merge anomalies: unexpected conflicts, lost changes.
  • Plugin issues: errors only when specific extensions are active.

Step 2: Gather Evidence

  • Run bzr check to detect repository integrity issues.
  • Use bzr info --verbose to confirm format and compatibility.
  • Enable verbose logging (BZR_LOG=2) for protocol-level diagnostics.
  • Compare branch tips and inventory using bzr missing and bzr inventory.

Common Pitfalls and Root Causes

1. Repository Format Mismatch

Old formats like pack-0.92 are inefficient for large repos and can cause unexpected slowdowns or failures when interacting with newer formats (e.g., 2a).

2. Corrupted Knit Index

Interrupted pushes or storage media failures can damage the knit index, making historical revisions inaccessible.

3. Merge Metadata Conflicts

Complex merge histories with missing merge-sorted metadata can cause repeated conflicts across branches.

4. Network Latency Bottlenecks

Bazaar’s smart server protocol struggles with high-latency links, increasing operation times exponentially for large histories.

Step-by-Step Fixes

Resolving Format Mismatches

# Upgrade repository to 2a format
bzr upgrade --format=2a
# Verify format
bzr info --verbose

Repairing Knit Index Corruption

# Run integrity check
bzr check --verbose
# Attempt automatic repair
bzr reconcile --verbose
# If needed, rebuild from backup or clone a healthy branch

Cleaning Merge Metadata

# Remove stale pending merges
bzr revert --forget-merges
# Resolve conflicts manually and commit cleanly

Optimizing for High-Latency Networks

# Use stacked branches to minimize history transfer
bzr branch --stacked SOURCE_URL TARGET_DIR
# Enable smart server over SSH for compression
bzr+ssh://

Best Practices for Long-Term Stability

  • Standardize on modern repository formats (2a) across all branches.
  • Implement automated bzr check in CI pipelines to catch corruption early.
  • Use stacked branches for geographically distributed teams to reduce transfer size.
  • Regularly reconcile repositories to clean metadata inconsistencies.
  • Vet and pin plugin versions to avoid compatibility drift.

Conclusion

Bazaar’s design flexibility comes with hidden risks in enterprise-scale deployments. By proactively managing repository formats, integrity checks, and network optimizations, and by maintaining strict plugin governance, teams can achieve predictable and stable version control performance—even under complex workflows and large histories.

FAQs

1. How can I detect repository corruption early?

Integrate bzr check into CI workflows and review its output regularly for warnings or errors.

2. What is the safest way to upgrade repository formats?

Clone a fresh copy, run bzr upgrade --format=2a, verify integrity, and only then replace production repositories.

3. How do I handle slow pulls from remote branches?

Use stacked branches or mirror repositories closer to your CI infrastructure to reduce latency impact.

4. Can Bazaar interoperate reliably with Git?

Yes, with plugins like bzr-git, but performance and metadata fidelity can vary; test workflows before adopting.

5. How often should I reconcile repositories?

Monthly in active repositories, or immediately after large merges, to maintain metadata consistency.