j6t / git-gui

Tcl/Tk based UI for Git
12 stars 8 forks source link

git-gui: fix inability to quit after closing another instance #1

Closed orgads closed 3 months ago

orgads commented 4 months ago

If you open 2 git gui instances in the same directory, then close one of them and try to close the other, an error message pops up, saying: 'error renaming ".git/GITGUI_BCK": no such file or directory', and it is no longer possible to close the window ever.

Fix by catching this error, and proceeding even if the file no longer exists.

j6t commented 4 months ago

I cannot reproduce this on Linux. Is this a problem only on Windows? What else is necessary to observe the problem? I started git gui twice, then closed them with Ctrl-Q without any error.

orgads commented 4 months ago

Maybe it's Windows only.

j6t commented 4 months ago

I cannot reproduce on Windows, either. What steps are necessary to observe the problem?

j6t commented 3 months ago

I found a method to reproduce this problem on Linux:

  1. Run git gui from a terminal.
  2. Edit the commit message and wait for at least 2 seconds.
  3. Terminate the instance from the terminal, for example with Ctrl-C, to simulate crash. This leaves the file .git/GITGUI_BCK behind.
  4. Start two instances of git gui &.

At this point the first instance can be closed (it renames .git/GITGUI_BCK to .git/GITGUI_MSG), but the seconds brings an error message about the absent file and cannot be closed thereafter and must be killed from the command line.

The renaming that happens by the first instance is the correct action and need not be repeated by the second instance. It is the correct action to ignore the failed renaming.

On the other hand, the second instance could just edit the commit message again, wait two seconds to write GITGUI_BCK, and then can be closed without failing. At this point, since the user has edited the message, it is again correct to preserve the edited version in GITGUI_MSG.

Thanks, will pick this up.

orgads commented 3 months ago

Thank you. I was on vacation last week, so I couldn't reply.