rojo-rbx / rojo

Rojo enables Roblox developers to use professional-grade software engineering tools
https://rojo.space
Mozilla Public License 2.0
906 stars 170 forks source link

Conflict Detection seems unreliable [Edit: nevermind, maybe a doc improvement?] #920

Closed tapple closed 1 month ago

tapple commented 1 month ago

I don't understand rojo conflicts:

  1. in the roblox studio rojo plugin, disconnect from rojo
  2. In studio, edit a script
  3. reconnect to rojo in the studio plugin

Expected behavior: Rojo warns me about a conflict, and asks me to confirm Actual behavior: Rojo silently overwrites the script I'm using Rojo 7.4.1

I've seen a conflict warning when another team member edits a script (it's a team create place), and I saw a lot of fake conflicts when I updated from rojo 7.2 to 7.3, but, I don't understand why the above doesn't give me a conflict. It feels like a rojo bug

I don't know how it detects conflicts. there's no "last modified" attribute for instances that I see. Maybe it only goes off some team-create-specific api to get the last team member name I'm kinda surprised rojo doesn't add a comment to the top or bottom of the file like

-- rojo modified 2024-05-27T00:00:00 SHA2 snoux389uxlaulg

that would only work for scripts I guess. I suppose it could add an attribute for all instances I guess conflict detection is best effort, and not guaranteed. Improving it probably requires the same studio enhancements that 2-way sync would require

I'm concerned that rojo is going to cause quiet data loss someday, the way I'm using it:

tapple commented 1 month ago

Not a bug. a discord user told me there's a setting for this in the plugin, and, indeed, changing the setting Confirmation Behavior to Always makes it behave as expected above

I never even noticed that settings button. I don't think it's mentioned in the docs at https://rojo.space/

Dekkonot commented 1 month ago

We don't document the Roblox Studio plugin or CLI very well at all right now, apologies. Going to close this issue and open some in rojo.space's repository.

Dekkonot commented 1 month ago

Outside of the above comment, I do want to clarify: we don't actually do conflict detection. What you're seeing is our patch visualizer, which is providing a visual for a patch that's incoming from Rojo's server. The reason you're seeing a diff with scripts is due to Boatbomber's lovely work on that front, but it's a special-cased visualization rather than something we actually use.

The way we detect differences is that we generate a new patch whenever a watched file or folder (on the file system) is modified. If the patch isn't empty, it's sent to the Roblox Studio plugin which then applies it. We compute a visualization of the patch and optionally prompt the user, but that's a separate process to the core loop of Rojo.

Do let me know if you have further questions on this. I'm also in the Discord if you want to ask me there for a quicker response.