Use flock() for file locking by expobrain · Pull Request #513 · gitpython-developers/GitPython · GitHub
Skip to content

Use flock() for file locking#513

Merged
Byron merged 11 commits intogitpython-developers:masterfrom
expobrain:master
Oct 9, 2016
Merged

Use flock() for file locking#513
Byron merged 11 commits intogitpython-developers:masterfrom
expobrain:master

Conversation

@expobrain
Copy link
Copy Markdown

@expobrain expobrain commented Sep 14, 2016

The problem with the original code is that the lock was based on the presence of the lockfile, that is if the lockfile exists the _obtain_lock() fails otherwise it succeed on acquiring the lock.

However this was problematic because between the check if the lockfile exists and the creation of the file another process can create the file as well resulting in a double lock, and we don't want to lock the same file twice :-)

@Byron
Copy link
Copy Markdown
Member

Byron commented Sep 24, 2016

@expobrain
Copy link
Copy Markdown
Author

Hi Byron, I'm more than happy to add the Windows support of this PR. Do you have any guidelines on how to develop and test GitPython on Windows?

@Byron
Copy link
Copy Markdown
Member

Byron commented Oct 1, 2016

@expobrain Thanks a lot in advance ! Any help is appreciated and welcome. There are not many requirements when getting started contributing, and the few things there are have been added to the contribution guide.

@ankostis Is working on integrating GitPython with AppVeyor as CI for windows in PR #519, which I believe would be very beneficial for you to have.

Alternatively, you just get started and focus on the tests that verify the locking specifically. Once they run on your machine locally, you could just push them into your PR to have travis verify nothing broke on the linux side.

I hope you find this answer helpful, and that you can get started painlessly.

@ankostis
Copy link
Copy Markdown
Contributor

ankostis commented Oct 1, 2016

#519 is a gargatuan PR that I've been working for almost 2 weeks.
It contains fixes for Appveyor to pass all green, but even them may not be enough for Windows. Extra TCs are needed; for instance, there are tests that fail on my machine and pass in Apveyor. Wozniak demands only the best from us programmers :-)

@ankostis
Copy link
Copy Markdown
Contributor

ankostis commented Oct 2, 2016

@expobrain can you rebase on master now that #519 is merged?

@ankostis ankostis force-pushed the master branch 2 times, most recently from 391a767 to 8a2f7dc Compare October 4, 2016 00:12
@expobrain
Copy link
Copy Markdown
Author

Yes, doing it now

@Byron
Copy link
Copy Markdown
Member

Byron commented Oct 9, 2016

Thanks a lot for your contribution, and to everyone else who has contributed to this PR !

@Byron Byron merged commit ac9ac55 into gitpython-developers:master Oct 9, 2016
@ankostis
Copy link
Copy Markdown
Contributor

ankostis commented Oct 11, 2016

@Byron Appveyor fails on this :-( https://ci.appveyor.com/project/ankostis/gitpython/build/1.0.225

Have you logged-into Appveyor and add this project?

@ankostis
Copy link
Copy Markdown
Contributor

ankostis commented Oct 11, 2016

@Byron This PR had caused me many Windows problems downstream - please revert.

@expobrain If the old locking-code is problematic, we may look also into this alternative library: https://github.com/pakal/rsfile/blob/master/doc/locking_semantic.rst

But I really miss an explanation what was the problem with the old code (add it in the OP).

@ankostis
Copy link
Copy Markdown
Contributor

Actually this PR has been reverted.

@expobrain if you feel like you can address some of the issue we can revisit this one; but please first explain what was the problem with the old code.
For start, I can give my own input on this:
it does not provide a resource contextlib-management API (with ...: construct). So maybe a better solution would be to tackle both issues, and consider also the library mentioned in the comments of the site wherer you got the code (thanks for keeping references to your job).

@expobrain
Copy link
Copy Markdown
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Development

Successfully merging this pull request may close these issues.

3 participants