tidy
BIN
docs/docs/wizardmerge.docx
Normal file
78
docs/docs/wizardmerge.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# WizardMerge: Save Us From Merging Without Any Clues
|
||||
|
||||
**Authors:** Qingyu Zhang, Junzhe Li, Jiayi Lin, Jie Ding, Lanteng Lin, Chenxiong Qian
|
||||
|
||||
> This markdown version condenses the contents of `wizardmerge.pdf` into a clean, accessible summary. It preserves the
|
||||
> paper's structure, key ideas, and reported results while omitting PDF-specific artifacts that appeared in the original
|
||||
> automated extraction.
|
||||
|
||||
## Abstract
|
||||
|
||||
Modern software development relies on efficient, version-oriented collaboration, yet Git's textual three-way merge can
|
||||
produce unsatisfactory results that leave developers with little guidance on how to resolve conflicts or detect incorrectly
|
||||
applied, conflict-free changes. WizardMerge is an auxiliary tool that augments Git's merge output by retrieving code-block
|
||||
dependencies at both the text and LLVM-IR levels and surfacing developer-facing suggestions. In evaluations across 227
|
||||
conflicts drawn from five large-scale projects, WizardMerge reduced conflict-handling time by 23.85% and provided
|
||||
suggestions for over 70% of code blocks potentially affected by the conflicts, including conflict-unrelated blocks that
|
||||
Git mistakenly applied.
|
||||
|
||||
## 1. Introduction
|
||||
|
||||
Git's default line-oriented three-way merge is fast and general, but it ignores syntax and semantics. Developers therefore
|
||||
frequently encounter merge conflicts or incorrect, conflict-free merges that still alter behavior. Prior structured and
|
||||
semi-structured merge tools reframe the problem around AST manipulation but still leave developers without guidance when
|
||||
conflicts arise. Machine-learning approaches can suggest resolutions but depend on specialized training data, introduce
|
||||
length constraints, and may not match developer intent. WizardMerge addresses these gaps by guiding developers toward
|
||||
conflict resolution rather than automatically rewriting code, highlighting both conflicting and potentially affected
|
||||
non-conflicting regions.
|
||||
|
||||
## 2. Background: Git Merging
|
||||
|
||||
Git identifies a merge base, aligns modified code blocks from each side, and treats each modified segment as a Differing
|
||||
Code Block (DCB). Conflicts occur when both sides touch overlapping regions; non-conflicting DCBs are applied directly but
|
||||
may still change behavior in subtle ways. Developers therefore need insight into how DCBs depend on one another and which
|
||||
blocks merit closer inspection during reconciliation.
|
||||
|
||||
## 3. Design of WizardMerge
|
||||
|
||||
WizardMerge combines Git's merge output with LLVM-based static analysis to illuminate dependencies among code blocks. The
|
||||
high-level workflow is:
|
||||
|
||||
1. **Metadata collection:** Compile each merge input with LLVM to gather intermediate representation (IR) and debug
|
||||
information without adding custom build steps for large projects.
|
||||
2. **Dependency graph generation:** Build overall dependency graphs from LLVM IR, aligning Git's DCBs with graph nodes to
|
||||
capture relationships across both text and IR levels.
|
||||
3. **Group-wise analysis:** Partition DCBs into relevance groups so that developers can triage related changes together
|
||||
rather than in isolation.
|
||||
4. **Priority-oriented classification:** Score and order DCBs based on dependency violations or potential risk, helping
|
||||
developers focus on code most likely to be affected by the merge.
|
||||
5. **Resolution suggestions:** Surface actionable hints for resolving conflicts and flag conflict-unrelated blocks that Git
|
||||
applied but still require human attention.
|
||||
|
||||
## 4. Evaluation
|
||||
|
||||
WizardMerge was evaluated on 227 conflicts from five large-scale projects. Key findings include:
|
||||
|
||||
- **Efficiency:** Average conflict-handling time decreased by 23.85% compared to baseline Git workflows.
|
||||
- **Coverage:** WizardMerge produced suggestions for more than 70% of code blocks potentially impacted by conflicts.
|
||||
- **False-safety detection:** The tool identified conflict-unrelated blocks that Git applied automatically but that still
|
||||
demanded manual review.
|
||||
- **Comparison to ML approaches:** Machine-learning-based merge generators struggle with large codebases due to sequence
|
||||
length limits and generalization challenges; WizardMerge avoids these constraints by relying on static analysis rather
|
||||
than learned models.
|
||||
|
||||
## 5. Limitations and Threats to Validity
|
||||
|
||||
- WizardMerge depends on successful LLVM compilation of both merge inputs; projects that cannot be built or require
|
||||
non-standard toolchains may limit applicability.
|
||||
- Static analysis provides conservative approximations and may miss dynamic dependencies, so developer judgment remains
|
||||
essential.
|
||||
- The evaluation focuses on a curated set of conflicts; broader studies could further validate effectiveness across diverse
|
||||
languages and project types.
|
||||
|
||||
## 6. Conclusion
|
||||
|
||||
WizardMerge augments Git's textual merging by revealing dependency-aware relationships among differing code blocks and
|
||||
prioritizing developer effort. By coupling Git merge results with LLVM-based analysis, it shortens conflict resolution time
|
||||
and highlights risky, conflict-unrelated changes that would otherwise slip through. Future work includes expanding language
|
||||
coverage, refining prioritization heuristics, and integrating the tool more deeply into developer workflows.
|
||||
BIN
docs/docs/wizardmerge.pdf
Normal file
2814
docs/images.json
Normal file
2
docs/miscimages/clip_colorschememapping.xml
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<a:clrMap xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/>
|
||||
BIN
docs/miscimages/clip_image001.gif
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
docs/miscimages/clip_image002.gif
Normal file
|
After Width: | Height: | Size: 79 B |
BIN
docs/miscimages/clip_image003.gif
Normal file
|
After Width: | Height: | Size: 131 B |
BIN
docs/miscimages/clip_image004.gif
Normal file
|
After Width: | Height: | Size: 307 B |
BIN
docs/miscimages/clip_image005.gif
Normal file
|
After Width: | Height: | Size: 558 B |
BIN
docs/miscimages/clip_image006.gif
Normal file
|
After Width: | Height: | Size: 597 B |
BIN
docs/miscimages/clip_image007.gif
Normal file
|
After Width: | Height: | Size: 628 B |
BIN
docs/miscimages/clip_image008.gif
Normal file
|
After Width: | Height: | Size: 595 B |
BIN
docs/miscimages/clip_image009.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
docs/miscimages/clip_image010.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
docs/miscimages/clip_image011.png
Normal file
|
After Width: | Height: | Size: 722 B |
BIN
docs/miscimages/clip_image012.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
docs/miscimages/clip_image013.png
Normal file
|
After Width: | Height: | Size: 792 B |
BIN
docs/miscimages/clip_image014.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
docs/miscimages/clip_image015.png
Normal file
|
After Width: | Height: | Size: 753 B |
BIN
docs/miscimages/clip_image016.png
Normal file
|
After Width: | Height: | Size: 735 B |
BIN
docs/miscimages/clip_image017.gif
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
docs/miscimages/clip_image018.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
docs/miscimages/clip_image019.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
docs/miscimages/clip_image020.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
docs/miscimages/clip_image021.png
Normal file
|
After Width: | Height: | Size: 791 B |
BIN
docs/miscimages/clip_image022.png
Normal file
|
After Width: | Height: | Size: 909 B |
BIN
docs/miscimages/clip_image023.gif
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
docs/miscimages/clip_image024.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
docs/miscimages/clip_image025.gif
Normal file
|
After Width: | Height: | Size: 381 B |
BIN
docs/miscimages/clip_image026.gif
Normal file
|
After Width: | Height: | Size: 251 B |
BIN
docs/miscimages/clip_image027.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
docs/miscimages/clip_image028.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
docs/miscimages/clip_image029.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
docs/miscimages/clip_image030.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
docs/miscimages/clip_image031.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
docs/miscimages/clip_image032.gif
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
docs/miscimages/clip_image033.png
Normal file
|
After Width: | Height: | Size: 234 KiB |
BIN
docs/miscimages/clip_image034.gif
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
docs/miscimages/clip_image035.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
docs/miscimages/clip_image036.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
docs/miscimages/clip_image037.png
Normal file
|
After Width: | Height: | Size: 882 B |
BIN
docs/miscimages/clip_image038.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
docs/miscimages/clip_image039.png
Normal file
|
After Width: | Height: | Size: 1023 B |
BIN
docs/miscimages/clip_image040.png
Normal file
|
After Width: | Height: | Size: 1022 B |
BIN
docs/miscimages/clip_image041.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
docs/miscimages/clip_image042.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
docs/miscimages/clip_image043.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
docs/miscimages/clip_image044.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
docs/miscimages/clip_image045.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
docs/miscimages/clip_image046.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
docs/miscimages/clip_image047.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
docs/miscimages/clip_image048.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
docs/miscimages/clip_image049.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
docs/miscimages/clip_image050.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
docs/miscimages/clip_image051.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
docs/miscimages/clip_image052.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
docs/miscimages/clip_image053.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
docs/miscimages/clip_image054.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
docs/miscimages/clip_image055.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
docs/miscimages/clip_image056.png
Normal file
|
After Width: | Height: | Size: 828 B |
BIN
docs/miscimages/clip_image057.png
Normal file
|
After Width: | Height: | Size: 826 B |
BIN
docs/miscimages/clip_image058.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
docs/miscimages/clip_image059.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
docs/miscimages/clip_image060.gif
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
docs/miscimages/clip_image061.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
docs/miscimages/clip_image062.png
Normal file
|
After Width: | Height: | Size: 461 B |
BIN
docs/miscimages/clip_image063.png
Normal file
|
After Width: | Height: | Size: 906 B |
BIN
docs/miscimages/clip_image064.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
docs/miscimages/clip_image065.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
docs/miscimages/clip_image066.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
docs/miscimages/clip_image067.png
Normal file
|
After Width: | Height: | Size: 543 B |
BIN
docs/miscimages/clip_image068.png
Normal file
|
After Width: | Height: | Size: 950 B |
BIN
docs/miscimages/clip_image069.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
docs/miscimages/clip_image070.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
docs/miscimages/clip_image071.png
Normal file
|
After Width: | Height: | Size: 572 B |
BIN
docs/miscimages/clip_image072.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
docs/miscimages/clip_image073.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
docs/miscimages/clip_image074.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
docs/miscimages/clip_image075.png
Normal file
|
After Width: | Height: | Size: 523 B |
BIN
docs/miscimages/clip_image076.png
Normal file
|
After Width: | Height: | Size: 988 B |
BIN
docs/miscimages/clip_image077.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
docs/miscimages/clip_image078.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
docs/miscimages/clip_image079.png
Normal file
|
After Width: | Height: | Size: 574 B |
BIN
docs/miscimages/clip_image080.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
docs/miscimages/clip_image081.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
docs/miscimages/clip_image082.gif
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
docs/miscimages/clip_image083.png
Normal file
|
After Width: | Height: | Size: 207 KiB |
BIN
docs/miscimages/clip_image084.gif
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
docs/miscimages/clip_image085.png
Normal file
|
After Width: | Height: | Size: 147 KiB |
BIN
docs/miscimages/clip_image086.gif
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
docs/miscimages/clip_image087.png
Normal file
|
After Width: | Height: | Size: 284 KiB |
BIN
docs/miscimages/clip_image088.gif
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
docs/miscimages/clip_image089.gif
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
docs/miscimages/clip_image090.png
Normal file
|
After Width: | Height: | Size: 458 B |
BIN
docs/miscimages/clip_image091.png
Normal file
|
After Width: | Height: | Size: 1013 B |
BIN
docs/miscimages/clip_image092.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
docs/miscimages/clip_image093.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
docs/miscimages/clip_image094.png
Normal file
|
After Width: | Height: | Size: 979 B |
BIN
docs/miscimages/clip_image095.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |