Skip to content

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

Houssem Nasri edited this page Feb 27, 2023 · 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

#9140 — Clarify the duplicates resolver dialog actions

user-documentation#404 — Update Merge entries dialog documentation

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

#9150 — Fix missing CSS for some dialogs

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