Skip to content

GSoC 2022 — Implement a Three Way Merge UI for merging BibTeX entries

Houssem Nasri edited this page Sep 3, 2022 · 19 revisions
Student Houssem Nasri
Organization [JabRef]
Primary repository [JabRef/jabref]
Project name Implement a Three Way Merge UI for merging BibTeX entries
Project mentors @Siedlerchr, @calixtus, @koppor et al.
Project page Google Summer of Code 2022 Project Page
Status Work in progress

Project Summary

Merging duplicates and resolving conflicts is a major use case for JabRef users, according to a 2019 research conducted by JabRef developers [^1]

Currently, both features are implemented using a two-way merge UI. This often leads to a poor user experience as users cannot see the merged entry immediately.

The goal of this project is to design and implement a new UI concept for merging entries that allow for a three-way merge. As well as implementing additional new features for making the merging process as easy and convenient as possible.

Pull Requests to main branch

GSOC Related

#8945 — [GSOC22] - A - Implement a fully functional three way merge UI

In this PR, I completed the first and second milestones listed in my proposal, which include designing and implementing a 3-way merge UI and replacing the existing merge UI with the new one in components that depend on it, which are:

  • Duplicate resolver dialog
  • External changes resolver dialog
  • Merge entries dialog

#9022 — [GSOC22] - B - Implement merging fields in the three way merge UI

#9021 — [GSOC22] - C - Improve the external changes resolver dialog

#9069 — [GSOC22] - D - Test the Three Way Merge UI

#8994 — Fix external group metadata changes are not merged

#9088 — Show a warning in the merge dialog when authors are the same but formatted differently

#9057 — Add the three-way merge changes to CHANGELOG.md

#9110 — Hide diffs when one of the field values is blank a.k.a no conflict

Outside of GSOC

#8874 — Use JDK 15 text blocks to improve injected languages readability

#8892 — Redesign "Manage field names & content" dialog

#8936 — Remember Sidepane width after restart

#8939 — Fix theme switching exception

#8973 — Improve Automatic Field Editor Dialog

#8993 — Sync group view mode and main table

Screenshots

The Duplicate Resolver Dialog

Light Theme
Dark Theme

The External Changes Resolver Dialog

Light Theme
Dark Theme

Blog Posts

Project plan

May 20 - Jun. 12 (2 weeks / Community Bonding)

  • Remain in touch with my mentor and ask as many questions as possible.
  • Check what is reuseable from import merger dialog of last years GSoC project of btut.
  • Work on smaller features and issues to gain a better understanding of the codebase.

Jun. 13 - Jul. 3 (3 weeks / Coding officially begins!)

  • Milestone 1: Deliver a new UI concept for merging entries (required)
  • Create mockups and diagrams e.g. user flow diagram.
  • Deliver a design prototype using Figma or another program.
  • Discuss UI/UX decisions with the other devs and community members.
  • Start implementing the new design in code.

Jul. 4 - Jul. 24 (3 weeks)

  • Milestone 2: Deliver a fully functional 3-way merge (required)
  • Finish implementing the new design in code.
  • Implement the three-way merge.
  • Improve diff highlighting.

Jul. 25 - Aug. 14 (3 weeks)

  • Milestone 3: Fix issues related to merging entries (required)
  • Merge keywords koppor#12.
  • Assign merged entry to all groups of input entries #8024.
  • Fix trimmed spaces in merge dialog koppor#371.

Aug. 15 - Aug. 28 (2 weeks)

  • Milestone 4: Update user documentation and write tests (required)
  • Update Find duplicates documentation.
  • Update Merge entries documentation.
  • Write tests.

Aug. 29 - Sep. 12 (2 weeks)

  • A Buffer of two weeks is kept for any unpredictable delay

Project goals

  • Deliver a fully functional 3-way merge #6190.
  • Deliver a new UI concept for merging entries.
  • Implement Previous Difference/Next Difference. (Turns out to be useless as most users don't have that many fields)
  • Implement synchronized scrolling and make soft-wrap optional. (It was decided that this is useless)
  • Improve diff highlighting.
  • Implement keyword merging as described in koppor#12.

References

[^1]: Simon, Martin K., et al. “Analyzing the Importance of JabRef Features from the User Perspective.” ZEUS. 2019

Clone this wiki locally