Synchronization with Language Depot

Can anyone explain how Language Depot synchronization works with Language Forge and FLEx? (I know where all the buttons are; I’m wondering what actually happens when I push the buttons.) Specifically: is it backing up/cloning/replacing items? What happens if LF and FLEx have both been changed and then you try to sync? Is it writing one version over another?

What happens to custom fields? If they are created in LF? In FLEx?

What happens when data disappears after a sync? Is it possible to dig it of the diff logs on LD?

Or maybe there’s an article already that explains all this?

AFAIK Language Depot is a Mercurial repository, i.e. it keeps all the files and does extensive bookkeeping of all changes.

To simplify:

Let’s say you pull (receive in SIL terminology) a record X with a version mark 100. Edit something and push (send) it back. X gets a version mark 101.

Now if user A pulls X with X at 101 and user B at 102. B finishes edits first and pushes X back, X gets stamp 103. When A finishes and tries to push their changes, a conflict arises because the system knows that they pulled at 101 but the current stored is 103.

I’m not sure how LD handles this, but I think they give you a simple option to choose between overriding (B’s edits are lost) or falling back (A’s edits are lost). Therefore it is imperative to S/R often.

I don’t know what is the locking level in LD, i.e. what is the smallest edit unit that is pulled/pushed and gets lost in case of a conflict.


Hi Maria,

In addition to Juha’s helpful reply, here’s some more details:

  • FLEx <–> FLEx and FLEx <–> LF Send/Receive have the same general conflict resolution strategy, which can be described as “They Win”. This is context-dependent however. e.g. if one edits and the other deletes, the edit always survives regardless of who “they” is.
  • FLEx <–> LF send/receive is only partially implemented. Input systems, list items, and custom fields currently only sync one-way from FLEx into LF, and then only initially.
  • Pushing Send/Receive in LF does create a “commit” in the repo, and this can be seen using Language Depot and other Mercurial tools which display the project commit history.
  • Once FLEx <–> LF sync is working (and it appears to only work for some projects), only the data that has changed in FLEx/LF gets updated. It does not do a full replace-all-items-every-time operation, like I think you are suggesting.
  • Figuring out what has changed in FLEx can be challenging. Reverting back to a previous version of the repo is also challenging. LF has a partially implemented “activity” feature which could have been helpful, but currently it only works on the entry level. Having a project-wide activity feed where every change is tracked and displayed is something we wanted to do, but ran out of resources to implement.

Thank you for your questions.

Thanks, that sort of makes sense! Especially the bit that edits trump deletions is useful to know.

Not realizing how things worked, we were entering plurals as a custom field. Turns out syncing deleted all of those at some point.

Unfortunately I managed to completely break synchronization between LF and LD, so may end up shifting my team over to WeSay if I can figure that out.