* bug#20637: incompatible, undocumented change to vc-working-revision @ 2015-05-23 23:49 Glenn Morris 2016-03-28 23:28 ` Dmitry Gutov 0 siblings, 1 reply; 41+ messages in thread From: Glenn Morris @ 2015-05-23 23:49 UTC (permalink / raw) To: 20637 Package: emacs Version: 25.0.50 mkdir /tmp/git cd /tmp/git git init touch 1 emacs-24.5: (vc-working-revision "1") ; -> nil Current master: (vc-working-revision "1") ; "master" C-h f vc-working-revision: If FILE is not registered, this function always returns nil. This changes documented behaviour without updating the doc or making a NEWS entry. Example breakage: http://lists.gnu.org/archive/html/help-gnu-emacs/2015-05/msg00384.html ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2015-05-23 23:49 bug#20637: incompatible, undocumented change to vc-working-revision Glenn Morris @ 2016-03-28 23:28 ` Dmitry Gutov 2016-03-29 18:13 ` Michael Albinus 2016-04-13 15:14 ` Michael Albinus 0 siblings, 2 replies; 41+ messages in thread From: Dmitry Gutov @ 2016-03-28 23:28 UTC (permalink / raw) To: Glenn Morris, 20637; +Cc: Michael Albinus On 05/24/2015 02:49 AM, Glenn Morris wrote: > Current master: > (vc-working-revision "1") ; "master" This has been caused by the commit 7f9b037245ddb662ad98685e429a2498ae6b7c62, which made both vc-state and vc-working-revision use vc-responsible-backend instead of vc-backend. As a result, in some backends these functions started return non-nil values for unknown files or directories, as long as they lie inside a VC repository. This change is indeed backward-incompatible, and it breaks the previous assumption of some backend functions that if FILE has been passed to it, then it's surely registered with the current backend. That's why the commit included changes adding lines like (unless (memq (vc-state file) '(nil unregistered))...), but it didn't get all affected code. In particular, it breaks an assumption I made when fixing #11757, that vc-git-state never receives an unregistered file as input. So if you evaluate (vc-state "1") now, it'll return `up-to-date'. While reverting the change makes some tests fail, we should fix them in different ways. For some backends, maybe, we should accept that (vc-state default-directory) and (vc-working-revision default-directory) will return nil. Alternatively, fix that problem inside the respective backends, without changing the dispatching functions. Also, reverting this commit also seems to uncover tests that shouldn't pass anyway. Checks like (should (eq (vc-state default-directory) (vc-state default-directory backend))) don't verify much, and in this case they seem to verify the wrong thing. More on that in the respective threads in emacs-devel later. Michael, thoughts? ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-03-28 23:28 ` Dmitry Gutov @ 2016-03-29 18:13 ` Michael Albinus 2016-04-01 0:36 ` Dmitry Gutov 2016-04-13 15:14 ` Michael Albinus 1 sibling, 1 reply; 41+ messages in thread From: Michael Albinus @ 2016-03-29 18:13 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: Hi Dmitry > Also, reverting this commit also seems to uncover tests that shouldn't > pass anyway. Checks like > > (should (eq (vc-state default-directory) > (vc-state default-directory backend))) > > don't verify much, and in this case they seem to verify the wrong > thing. More on that in the respective threads in emacs-devel later. > > Michael, thoughts? Why is verifying such tests "the wrong thing"? It's a while ago that I wrote the tests, but IIRC I've added them exactly because I did expect that such tests should pass, and they didn't. I even fixed some trivial corner cases when writing the tests. as far as I understood the code. Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-03-29 18:13 ` Michael Albinus @ 2016-04-01 0:36 ` Dmitry Gutov 2016-04-09 19:34 ` Michael Albinus 0 siblings, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-01 0:36 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 03/29/2016 09:13 PM, Michael Albinus wrote: > Why is verifying such tests "the wrong thing"? It's a while ago that I > wrote the tests, but IIRC I've added them exactly because I did expect > that such tests should pass, and they didn't. It's certainly not very meaningful to test this (it's better to compare to actual values; for all we know, the above method returns `fooled-ya' in both cases). As far as it being wrong: it is, if you consider that some existing implementations don't expect to be called with FILE that's not registered. So different return values in these two cases are to be expected. > I even fixed some trivial > corner cases when writing the tests. as far as I understood the code. Yes, you found some of those cases (but, like mentioned, not all), and that required double-checking that the file is indeed registered. You can argue that the new semantics are more straightforward, and I don't disagree (the docstring of vc-state seems to agree already; vc-working-revision's docstring disagrees). But the cost to that is extra process calls. I'm not sure if the changes in 7f9b037245ddb662ad98685e429a2498ae6b7c62 add any extra process calls, but they do add some interaction with the filesystem. Fixing the newly introduced problem with vc-git-state would require an extra process call, more or less reverting the fix for bug#11757. I don't know how much of a problem that is (I haven't used Windows in a while, and my current laptop is faster that what I had back then anyway), but it would certainly be nice not to introduce a regression in features, or performance. As far as vc-git-state, one way to do that is reimplementing some commands using 'git status --porcelain', introduced in Git 1.7.0. We should double-check if we're allowed to rely on this version being available (which Git does the the oldest relevant version of CentOS install now?), and it might be too late for Emacs 25.1 anyway. Calling vc-responsible-backend is also inherently slower than vc-backend, though not perceptibly so on this localhost (4e-5s vs 4e-6s). But it's likely more painful for remove hosts; how is it, in your experience? ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-01 0:36 ` Dmitry Gutov @ 2016-04-09 19:34 ` Michael Albinus 2016-04-09 20:42 ` Dmitry Gutov 0 siblings, 1 reply; 41+ messages in thread From: Michael Albinus @ 2016-04-09 19:34 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: Hi Dmitry, you have written several things I would like to move for later discussion. I believe, we shall start again from the basics. I have extended vc-test-*01-register tests by calls to vc-backend and vc-responsible-backend. Mainly in order to understand how they work, but also for covering these functions. One problem I've found is that vc-file-*prop functions do not work well for relative file names; I've fixed this. With this fix, vc-test-src02-state failed. I've masked the test for future investigations; first I would like to make all vc-test-*01-register tests run proper. Several problems I have marked with FIXME in the working horse of those tests, vc-test--register: - For some backends (CVS, RCS and SVN), vc-backend returns the backend name for the newly created repo directory, and the directory is registered already. For the other backends, vc-backend returns nil as expected. Shouldn't this be consistent for all backends? - vc-backend accepts also a list of files, vc-responsible-backend doesn't. Is this right? - There is no common function vc-unregister, just some backend specific vc-<backend>-unregister. Shouldn't vc-unregister exist? It should call common code, like vc-file-clearprops. For the time being, I have emulated this. Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-09 19:34 ` Michael Albinus @ 2016-04-09 20:42 ` Dmitry Gutov 2016-04-10 8:00 ` Michael Albinus 0 siblings, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-09 20:42 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 Hi Michael, On 04/09/2016 10:34 PM, Michael Albinus wrote: > you have written several things I would like to move for later > discussion. I believe, we shall start again from the basics. OK, but the questions seem tangential to this bug report, which is a blocker for 25.1 (whereas investigating how various commands should work, isn't). > I have extended vc-test-*01-register tests by calls to vc-backend and > vc-responsible-backend. Mainly in order to understand how they work, but > also for covering these functions. One problem I've found is that > vc-file-*prop functions do not work well for relative file names; I've > fixed this. The change looks good, but nevertheless seeing the commit 5e1c32e in master makes me worried about conflicts when merging the necessary future fix for this bug from emacs-25 to master. > Several problems I have marked with FIXME in the working horse of those > tests, vc-test--register: > > - For some backends (CVS, RCS and SVN), vc-backend returns the backend > name for the newly created repo directory, and the directory is > registered already. For the other backends, vc-backend returns nil as > expected. Shouldn't this be consistent for all backends? I'm not quite clear on what you are saying here. If you're calling vc-backend on a directory, I believe the result is undefined. As in, the function is allowed to return any value. Maybe we could check file-directory-p in vc-backend, and signal an error if it is. For directories, one has to call vc-responsible-backend. > - vc-backend accepts also a list of files, vc-responsible-backend > doesn't. Is this right? I suppose. The function signatures say so. But I don't see any callers of vc-backend that actually pass a list to it. > - There is no common function vc-unregister, just some backend specific > vc-<backend>-unregister. Those are the implementations of the `unregister' backend command. It's only used in vc-transfer-file currently. > Shouldn't vc-unregister exist? Maybe it should. Would you ever use it interactively? > It should call > common code, like vc-file-clearprops. For the time being, I have > emulated this. Are you doing that just to test the `unregister' implementations? Because otherwise, to clean up after a test, you can simply delete the directory with the test repository. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-09 20:42 ` Dmitry Gutov @ 2016-04-10 8:00 ` Michael Albinus 2016-04-10 16:00 ` Dmitry Gutov 0 siblings, 1 reply; 41+ messages in thread From: Michael Albinus @ 2016-04-10 8:00 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: > Hi Michael, Hi Dmitry, >> you have written several things I would like to move for later >> discussion. I believe, we shall start again from the basics. > > OK, but the questions seem tangential to this bug report, which is a > blocker for 25.1 (whereas investigating how various commands should > work, isn't). If there is a simple and obvious fix for this problem, let apply it to the emacs-25 branch. Even if we must change it later in master. But I doubt that's possible. This bug report was written on 23 May 2015, it was marked as release blocker on the same day, and still no fix. I believe that there won't be a fix in emacs-25, and whatever we might find on our way to stabilize vc, it will be too late and too much to be applied to the emacs-25 branch. For all those problems in vc I have the impression, that we must stabilize vc first. Starting with the very basic functionality - that's why I've added tests for vc-backend and vc-responsible-backend. Often, there might be not an error, but missing or wrong documentation. As Glenn has said also in bug#19548, another release blocker for 25.1. I don't care whether we discuss it here, in bug#19548 or in the emacs-devel ML. But at least *I* am not able to handle those issues differently. And nobody but you and me seem to work on vc problems in general. >> I have extended vc-test-*01-register tests by calls to vc-backend and >> vc-responsible-backend. Mainly in order to understand how they work, but >> also for covering these functions. One problem I've found is that >> vc-file-*prop functions do not work well for relative file names; I've >> fixed this. > > The change looks good, but nevertheless seeing the commit 5e1c32e in > master makes me worried about conflicts when merging the necessary > future fix for this bug from emacs-25 to master. As said, I doubt that we will find something which could go into emacs-25. Of course I would be happy if I'm wrong :-) >> Several problems I have marked with FIXME in the working horse of those >> tests, vc-test--register: >> >> - For some backends (CVS, RCS and SVN), vc-backend returns the backend >> name for the newly created repo directory, and the directory is >> registered already. For the other backends, vc-backend returns nil as >> expected. Shouldn't this be consistent for all backends? > > I'm not quite clear on what you are saying here. If you're calling > vc-backend on a directory, I believe the result is undefined. As in, > the function is allowed to return any value. Maybe we could check > file-directory-p in vc-backend, and signal an error if it is. The docstring says nothing about directories, so the call I've applied is legal. If vc-backend is not intended for directories we should document it first. But ... > For directories, one has to call vc-responsible-backend. ... I even doubt that directories are out of scope of vc-backend. Directories can be registered for some VCS, for example for CVS, or for ClearCase which I use at work (I know, we have no official support for ClearCase in vc). Therefore we shall precise the docstring of vc-backend, that it returns the backend also for directories for VCSes which support rgistration of directories. A pointer to vc-responsible-backend might also be helpful in the docstring of vc-backend. >> - vc-backend accepts also a list of files, vc-responsible-backend >> doesn't. Is this right? > > I suppose. The function signatures say so. But I don't see any callers > of vc-backend that actually pass a list to it. I know what the docstring says :-) My question is, whether we shall offer the same argument list for both vc-backend and vc-responsible-backend. >> - There is no common function vc-unregister, just some backend specific >> vc-<backend>-unregister. > > Those are the implementations of the `unregister' backend > command. It's only used in vc-transfer-file currently. > >> Shouldn't vc-unregister exist? > > Maybe it should. Would you ever use it interactively? Don't know. But I believe "interactively" is not the criterion whether a general vc function shall exist. I also don't call vc-registered interactively. >> It should call >> common code, like vc-file-clearprops. For the time being, I have >> emulated this. > > Are you doing that just to test the `unregister' implementations? Yes. And I'm still in favor of adding vc-unregister in vc.el. Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-10 8:00 ` Michael Albinus @ 2016-04-10 16:00 ` Dmitry Gutov 2016-04-10 18:09 ` Michael Albinus 0 siblings, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-10 16:00 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/10/2016 11:00 AM, Michael Albinus wrote: > If there is a simple and obvious fix for this problem, let apply it to > the emacs-25 branch. Even if we must change it later in master. Why not revert 7f9b037245ddb662ad98685e429a2498ae6b7c62? I believe I've mentioned that suggestion before. The only difficulty here, as far as I'm concerned, is to update the corresponding tests so they don't break, but are not disabled, and still look somewhat reasonable. That's where the merge conflict concerns come into play. But "no disabled tests" is not a hard requirement for release anyway. > But I doubt that's possible. This bug report was written on 23 May 2015, > it was marked as release blocker on the same day, and still no fix. Not because it's too difficult to resolve. > For all those problems in vc I have the impression, that we must > stabilize vc first. Starting with the very basic functionality - that's > why I've added tests for vc-backend and vc-responsible-backend. I agree with the sentiment, but not with certain choices of the areas to "stabilize" it in. You've basically been discovering aspects of the current commands and functions that are poorly specified. But those aspects (with some exceptions, I suppose) are not regressions from Emacs 24. They have been there for a while. > I don't care whether we discuss it here, in bug#19548 or in the > emacs-devel ML. I don't mind too much any way, but 19548 is for the manual and such. A separate bug report (or several) or discussions on emacs-devel seem preferable. Unless I'm mistaken about these problems being orthogonal, of course. > The docstring says nothing about directories, so the call I've applied > is legal. Best wishes to whoever wrote that docstring. > ... I even doubt that directories are out of scope of vc-backend. > Directories can be registered for some VCS, for example for CVS, or for > ClearCase which I use at work (I know, we have no official support for > ClearCase in vc). In general, VC supports the lowest common denominator across the backends. Or at least, a feature should be supported in a few important ones. CVS is on its way out, and ClearCase is a relatively niche tool. Anyway, the point is VC is for people to be able to write code depending on the public API and see it work across many VCSes. And Git and Mercurial, at least, don't track directories. > Therefore we shall precise the docstring of > vc-backend, that it returns the backend also for directories for VCSes > which support rgistration of directories. Why? Just tell anyone who wants to know a directory's backend to use vc-responsible-backend instead. > I know what the docstring says :-) My question is, whether we shall > offer the same argument list for both vc-backend and vc-responsible-backend. We could, but honestly, that question doesn't sound particularly important right now. Yes, it's a wart, and if there are no users that pass a list to it, we can remove this possibility. Note that vc-backend and vc-responsible-backend have different performance characteristics (and, I imagine, different behavior in case of nested repositories), so simply replacing all uses of the former with the latter is not a good idea. > Don't know. But I believe "interactively" is not the criterion whether a > general vc function shall exist. I also don't call vc-registered interactively. Interactive use would be a strong justification. vc-register can be used interactively, and it's called from vc-next-action. How will we use vc-unregister? >>> It should call >>> common code, like vc-file-clearprops. For the time being, I have >>> emulated this. >> >> Are you doing that just to test the `unregister' implementations? > > Yes. That seems very low priority. I wonder how often vc-transfer-file gets used in practice these days. > And I'm still in favor of adding vc-unregister in vc.el. I don't really mind. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-10 16:00 ` Dmitry Gutov @ 2016-04-10 18:09 ` Michael Albinus 2016-04-10 18:58 ` Dmitry Gutov 0 siblings, 1 reply; 41+ messages in thread From: Michael Albinus @ 2016-04-10 18:09 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: > On 04/10/2016 11:00 AM, Michael Albinus wrote: > >> If there is a simple and obvious fix for this problem, let apply it to >> the emacs-25 branch. Even if we must change it later in master. > > Why not revert 7f9b037245ddb662ad98685e429a2498ae6b7c62? I believe > I've mentioned that suggestion before. Why that? That patch fixes problems. How would you solve them otherwise? And what problem has been introduced with that patch? This one we are speaking about, bug#20637? Maybe you have mentioned this already, and I've overseen this. > The only difficulty here, as far as I'm concerned, is to update the > corresponding tests so they don't break, but are not disabled, and > still look somewhat reasonable. That's where the merge conflict > concerns come into play. But "no disabled tests" is not a hard > requirement for release anyway. Could you show a patch which reverts 7f9b037245ddb662ad98685e429a2498ae6b7c62, and also updates the tests? Maybe it is simpler to speak about this concrete proposal. >> But I doubt that's possible. This bug report was written on 23 May 2015, >> it was marked as release blocker on the same day, and still no fix. > > Not because it's too difficult to resolve. But nobody has taken any action for more than 10 months :-( >> For all those problems in vc I have the impression, that we must >> stabilize vc first. Starting with the very basic functionality - that's >> why I've added tests for vc-backend and vc-responsible-backend. > > I agree with the sentiment, but not with certain choices of the areas > to "stabilize" it in. You've basically been discovering aspects of the > current commands and functions that are poorly specified. But those > aspects (with some exceptions, I suppose) are not regressions from > Emacs 24. They have been there for a while. Oh, there are regressions. ESR has undertaken his rewrite of vc*.el end of 2014. Emacs 25.1 is the first release which brings them to the public. See also vc.el, and compare the functions listed in the Commentary section between Emacs 24.5 and 25.1. Read also "Changes from the pre-25.1 API" at the same place in the 25.1 version of vc.el. Unfortunately, etc/NEWS of Emacs 25.1 is very silent about those changes. >> I don't care whether we discuss it here, in bug#19548 or in the >> emacs-devel ML. > > I don't mind too much any way, but 19548 is for the manual and such. A > separate bug report (or several) or discussions on emacs-devel seem > preferable. Unless I'm mistaken about these problems being orthogonal, > of course. I might be wrong, but Glenn didn't write this bug only because of some missing docs. I believe he was unhappy about the whole process, how those changes did arrive. But I'm not Glenn, and I shouldn't interpret too much ... >> ... I even doubt that directories are out of scope of vc-backend. >> Directories can be registered for some VCS, for example for CVS, or for >> ClearCase which I use at work (I know, we have no official support for >> ClearCase in vc). > > In general, VC supports the lowest common denominator across the > backends. Or at least, a feature should be supported in a few > important ones. CVS is on its way out, and ClearCase is a relatively > niche tool. You have read my comment in vc-tests.el? At least CVS, RCS and SVN seem to behave this way. So it is reasonable to handle the case, that directories are registered. > Anyway, the point is VC is for people to be able to write code > depending on the public API and see it work across many VCSes. And Git > and Mercurial, at least, don't track directories. So what? We could say in the doc that registering directories is not supported for all backends. People who write a backend know what they do. I hope. >> Therefore we shall precise the docstring of >> vc-backend, that it returns the backend also for directories for VCSes >> which support rgistration of directories. > > Why? Just tell anyone who wants to know a directory's backend to use > vc-responsible-backend instead. I have no problem to recommend vc-responsible-backend. But vc-backend does already TRT: when a directory is registered, it returns the backend name. When a directory is not registered, it returns nil. This is *not* a statement why a directory is not registered, and whether registering directories is possible at all for a backend. >> I know what the docstring says :-) My question is, whether we shall >> offer the same argument list for both vc-backend and vc-responsible-backend. > > We could, but honestly, that question doesn't sound particularly > important right now. Yes, it's a wart, and if there are no users that > pass a list to it, we can remove this possibility. > > Note that vc-backend and vc-responsible-backend have different > performance characteristics (and, I imagine, different behavior in > case of nested repositories), so simply replacing all uses of the > former with the latter is not a good idea. I haven't proposed this! I simply want to understand (and document) what both functions are doing. Which of them is taken by a backend is the decision of the maintainer of the backend. I'm pretty much in favor to also document the differences in performance. >> Don't know. But I believe "interactively" is not the criterion whether a >> general vc function shall exist. I also don't call vc-registered >> interactively. > > Interactive use would be a strong justification. vc-register can be > used interactively, and it's called from vc-next-action. I haven't spoken about vc-register. I have spoken about vc-registered. This one exist as general function, and it isn't interactive. > How will we use vc-unregister? Every backend can use it instead of its backend specific function, like vc-git-unregister. It runs common code then like removing properties, and calls the backend specific function then. >>>> It should call >>>> common code, like vc-file-clearprops. For the time being, I have >>>> emulated this. >>> >>> Are you doing that just to test the `unregister' implementations? >> >> Yes. > > That seems very low priority. I wonder how often vc-transfer-file gets > used in practice these days. I understand that's low priority for you, and I accept this. For me, while extending vc-tests.el, it isn't low priority. I need solid ground under my feed, and therefore I'm starting with the very basic functions. Understanding, testing, maybe fixing bugs, maybe improving documentation. Function by function. >> And I'm still in favor of adding vc-unregister in vc.el. > > I don't really mind. So I will do, unless somebody stops me :-) Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-10 18:09 ` Michael Albinus @ 2016-04-10 18:58 ` Dmitry Gutov 2016-04-11 6:55 ` Michael Albinus 0 siblings, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-10 18:58 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/10/2016 09:09 PM, Michael Albinus wrote: >> Why not revert 7f9b037245ddb662ad98685e429a2498ae6b7c62? I believe >> I've mentioned that suggestion before. > > Why that? That patch fixes problems. How would you solve them otherwise? It just fixed the tests you've introduced a little while before that. I'm not aware of any related bug reports. The new tests assumed new semantics, so you fixed them by changing semantics, thereby causing the "incompatible, undocumented change". > And what problem has been introduced with that patch? This one we are > speaking about, bug#20637? Yes. > Maybe you have mentioned this already, and > I've overseen this. I wrote about that in the very first message to this thread: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=20637#10 > Could you show a patch which reverts > 7f9b037245ddb662ad98685e429a2498ae6b7c62, and also updates the tests? > Maybe it is simpler to speak about this concrete proposal. Unless you have a different proposal, I'll write and simply commit that patch. >>> But I doubt that's possible. This bug report was written on 23 May 2015, >>> it was marked as release blocker on the same day, and still no fix. >> >> Not because it's too difficult to resolve. > > But nobody has taken any action for more than 10 months :-( I would expect that to be the responsibility of the person who caused the breakage. > Oh, there are regressions. ESR has undertaken his rewrite of vc*.el end > of 2014. Emacs 25.1 is the first release which brings them to the > public. There are regressions, but the questions you've been asking don't seem to number among them. > Unfortunately, etc/NEWS of Emacs 25.1 is very silent about those > changes. That's bug bug#19548. Could we keep that discussion out of this one? > I might be wrong, but Glenn didn't write this bug only because of some > missing docs. I believe he was unhappy about the whole process, how > those changes did arrive. But I'm not Glenn, and I shouldn't interpret > too much ... This bug is about vc-working-revision. It's in the title. >> In general, VC supports the lowest common denominator across the >> backends. Or at least, a feature should be supported in a few >> important ones. CVS is on its way out, and ClearCase is a relatively >> niche tool. > > You have read my comment in vc-tests.el? Which comment are you referring to? > At least CVS, RCS and SVN seem > to behave this way. You've mentioned that in the previous message. Out of these three, only SVN is in any way recommended for production use these days. In any case, they're aging and only decreasing in popularity. > So it is reasonable to handle the case, that > directories are registered. I do not understand this argument. >> Anyway, the point is VC is for people to be able to write code >> depending on the public API and see it work across many VCSes. And Git >> and Mercurial, at least, don't track directories. > > So what? "So what" doesn't seem like a meaningful response to the first sentence above. > We could say in the doc that registering directories is not > supported for all backends. People who write a backend know what they > do. I hope. We could say a lot of things. We could even say that every backend behaves in its own special way (and enumerate all those ways), but where will that get us? Again, what's the benefit of introducing this complication? > But vc-backend > does already TRT: when a directory is registered, it returns the backend > name. When a directory is not registered, it returns nil. It just does the thing that's more convenient for each backend. That doesn't make it TRT. > This is *not* > a statement why a directory is not registered, and whether registering > directories is possible at all for a backend. Indeed, and that's a problem: if the caller receives nil, it cannot know whether that's because the directory is not a part of a VCS checkout, or because the backend does not support tracking directories. This is a reason not to support calling vc-backend on directories: it leads to unportable code. >> Note that vc-backend and vc-responsible-backend have different >> performance characteristics (and, I imagine, different behavior in >> case of nested repositories), so simply replacing all uses of the >> former with the latter is not a good idea. > > I haven't proposed this! Good. I've just made a guess on why you've asked the question, and 7f9b037245ddb662ad98685e429a2498ae6b7c62 hinted at that conclusion. > I simply want to understand (and document) what > both functions are doing. OK. It's not like I'm a big hoard of knowledge about them. To answer the questions, I've just looked at their definitions and usages. > Which of them is taken by a backend is the > decision of the maintainer of the backend. I don't understand this. What kind of decisions would backend maintainers make about them? > I'm pretty much in favor to also document the differences in performance. OK. > I haven't spoken about vc-register. I have spoken about > vc-registered. This one exist as general function, and it isn't interactive. I see. But vc-registered is a relatively meaty function, and it has two callers outside of tests. That looks better justified to me. >> How will we use vc-unregister? > > Every backend can use it instead of its backend specific function, like > vc-git-unregister. It runs common code then like removing properties, > and calls the backend specific function then. vc-git-unregister has no internal callers. Anyway, please go ahead with `vc-unregister' is you feel so strongly about it. > I understand that's low priority for you, and I accept this. For me, > while extending vc-tests.el, it isn't low priority. I need solid ground > under my feed, and therefore I'm starting with the very basic > functions. My point was, the `unregister' command is a fringe one, not a basic one. > Understanding, testing, maybe fixing bugs, maybe improving > documentation. Function by function. Sure. But I think we should fix the current bug first. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-10 18:58 ` Dmitry Gutov @ 2016-04-11 6:55 ` Michael Albinus 2016-04-13 20:55 ` Dmitry Gutov 0 siblings, 1 reply; 41+ messages in thread From: Michael Albinus @ 2016-04-11 6:55 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: Hi Dmitry, >> But nobody has taken any action for more than 10 months :-( > > I would expect that to be the responsibility of the person who caused > the breakage. Of course! Until now I even didn't realize this was broken by my patch. Sorry, but I have been in hospital last year, and when I recovered there were too many messages to scan. I'll check what could be done. I'll return later. Best regards, Michael. PS: the discussion about my other changes in vc-tests.el shall be moved to the emacs-devel ML. Let's restart it there, when this problem is solved. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-11 6:55 ` Michael Albinus @ 2016-04-13 20:55 ` Dmitry Gutov 2016-04-14 7:10 ` Michael Albinus 0 siblings, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-13 20:55 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/11/2016 09:55 AM, Michael Albinus wrote: >>> But nobody has taken any action for more than 10 months :-( >> >> I would expect that to be the responsibility of the person who caused >> the breakage. > > Of course! > > Until now I even didn't realize this was broken by my patch. Sorry, but > I have been in hospital last year, and when I recovered there were too > many messages to scan. To be clear, I don't mean to blame you for the time that has passed. But you were probably the best person to notice this regression, and understand why it happened, early enough. Personally, I've looked at this bug report before, and could only tell that the documentation needed updating (but the changed behavior is fine). That's not my impression anymore. Thanks. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-13 20:55 ` Dmitry Gutov @ 2016-04-14 7:10 ` Michael Albinus 2016-04-14 13:53 ` Dmitry Gutov 2016-04-14 15:23 ` Eli Zaretskii 0 siblings, 2 replies; 41+ messages in thread From: Michael Albinus @ 2016-04-14 7:10 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: Hi Dmitry, >> Until now I even didn't realize this was broken by my patch. Sorry, but >> I have been in hospital last year, and when I recovered there were too >> many messages to scan. > > To be clear, I don't mean to blame you for the time that has > passed. But you were probably the best person to notice this > regression, and understand why it happened, early enough. No problem, I didn't felt being blamed. It was just an unfortune coincidence, that this bug wasn't handled earlier. And I still feel unhappy that none of the active Emacs maintainers feels responsible for vc*.el. I'm trying to support fixing problems here, but most of the code, and the VCSes being used, are still terra incognita for me. > Thanks. Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-14 7:10 ` Michael Albinus @ 2016-04-14 13:53 ` Dmitry Gutov 2016-04-14 15:26 ` Michael Albinus 2016-04-14 15:23 ` Eli Zaretskii 1 sibling, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-14 13:53 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/14/2016 10:10 AM, Michael Albinus wrote: > And I still feel unhappy that none of the active Emacs maintainers feels > responsible for vc*.el. I do feel responsible, and I try to take care of most bug reports in that area. > I'm trying to support fixing problems here, but > most of the code, and the VCSes being used, are still terra incognita for me. It would be great if the problems we're fixing were formulated like "VC behaves like this, and it causes that problem in practice (or could cause, at least)", rather than "here is a test case, and I feel it should pass". I think that would encourage more practical choices. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-14 13:53 ` Dmitry Gutov @ 2016-04-14 15:26 ` Michael Albinus 2016-04-15 0:33 ` Dmitry Gutov 0 siblings, 1 reply; 41+ messages in thread From: Michael Albinus @ 2016-04-14 15:26 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: >> And I still feel unhappy that none of the active Emacs maintainers feels >> responsible for vc*.el. > > I do feel responsible, and I try to take care of most bug reports in > that area. I know that you do and I really appreciate this! But since ESRs rewrite in fall 2014, there are still several inconsistencies. Eric confirmed that in an email to me. So it's not only bug hunting, a systematic review of the state is needed. I've started to write systematic tests (up to my limited knowledge), and I've asked several times in emacs-devel ML for support, but nearly no response. That's why I'm kinda frustrated. Well, forget my lamenting. I'm still willing to help to improve. But I cannot do this alone, as in the past. >> I'm trying to support fixing problems here, but >> most of the code, and the VCSes being used, are still terra incognita for me. > > It would be great if the problems we're fixing were formulated like > "VC behaves like this, and it causes that problem in practice (or > could cause, at least)", rather than "here is a test case, and I feel > it should pass". I think that would encourage more practical choices. I agree that the tests shall be much more commented. But I see also the lack of documentation and implicit design decisions (you spoke about somewhere), which must be improved I believe. Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-14 15:26 ` Michael Albinus @ 2016-04-15 0:33 ` Dmitry Gutov 2016-04-15 13:13 ` Michael Albinus 0 siblings, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-15 0:33 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/14/2016 06:26 PM, Michael Albinus wrote: > But since ESRs rewrite in fall 2014, there are still several > inconsistencies. Do you mean any of the changes introduced in the rewrite? If so, which ones? > Eric confirmed that in an email to me. So it's not only > bug hunting, a systematic review of the state is needed. Sure, VC has problems, but (vc-state FILE) not always being equal to (vc-state FILE BACKEND) does not seem like the biggest one. It hasn't come up on my radar even once before. > I've started to write systematic tests (up to my limited knowledge), and > I've asked several times in emacs-devel ML for support, but nearly no > response. That's why I'm kinda frustrated. I remember. I'm here now, open to questions and dicussions. I'd like to avoid switching to master myself for the time being, though. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-15 0:33 ` Dmitry Gutov @ 2016-04-15 13:13 ` Michael Albinus 0 siblings, 0 replies; 41+ messages in thread From: Michael Albinus @ 2016-04-15 13:13 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: >> I've started to write systematic tests (up to my limited knowledge), and >> I've asked several times in emacs-devel ML for support, but nearly no >> response. That's why I'm kinda frustrated. > > I remember. I'm here now, open to questions and dicussions. I'd like > to avoid switching to master myself for the time being, though. I have installed both versions in parallel on my laptop. No need to switch, therefore :-) Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-14 7:10 ` Michael Albinus 2016-04-14 13:53 ` Dmitry Gutov @ 2016-04-14 15:23 ` Eli Zaretskii 1 sibling, 0 replies; 41+ messages in thread From: Eli Zaretskii @ 2016-04-14 15:23 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637, dgutov > From: Michael Albinus <michael.albinus@gmx.de> > Date: Thu, 14 Apr 2016 09:10:09 +0200 > Cc: 20637@debbugs.gnu.org > > And I still feel unhappy that none of the active Emacs maintainers feels > responsible for vc*.el. We have similar void with some other packages, unfortunately. Volunteers are welcome. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-03-28 23:28 ` Dmitry Gutov 2016-03-29 18:13 ` Michael Albinus @ 2016-04-13 15:14 ` Michael Albinus 2016-04-13 20:49 ` Dmitry Gutov 1 sibling, 1 reply; 41+ messages in thread From: Michael Albinus @ 2016-04-13 15:14 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 [-- Attachment #1: Type: text/plain, Size: 2201 bytes --] Dmitry Gutov <dgutov@yandex.ru> writes: > This has been caused by the commit > 7f9b037245ddb662ad98685e429a2498ae6b7c62, which made both vc-state and > vc-working-revision use vc-responsible-backend instead of vc-backend. Yes. > As a result, in some backends these functions started return non-nil > values for unknown files or directories, as long as they lie inside a > VC repository. vc-working-revision shall return nil for unregistered files. vc-state shall return a non-nil value, 'unregistered. > This change is indeed backward-incompatible, and it breaks the > previous assumption of some backend functions that if FILE has been > passed to it, then it's surely registered with the current > backend. You cannot guarantee this. Anybody is free to call the functions with unregistered files. And in the vc-state case, it is even documented that this could happen. > In particular, it breaks an assumption I made when fixing #11757, that > vc-git-state never receives an unregistered file as input. So if you > evaluate (vc-state "1") now, it'll return `up-to-date'. This assumption could be kept if vc-state filters such unregistered files out. > While reverting the change makes some tests fail, we should fix them > in different ways. > > For some backends, maybe, we should accept that (vc-state > default-directory) and (vc-working-revision default-directory) will > return nil. Alternatively, fix that problem inside the respective > backends, without changing the dispatching functions. > > Also, reverting this commit also seems to uncover tests that shouldn't > pass anyway. Checks like > > (should (eq (vc-state default-directory) > (vc-state default-directory backend))) > > don't verify much, and in this case they seem to verify the wrong > thing. More on that in the respective threads in emacs-devel later. > > Michael, thoughts? I've prepared a patch which just covers the case that a file is unregistered, in both vc-state and vc-working-revision. It is a very small change, that I believe it could still go into the emacs-25 branch. Patch towards emacs-25 branch is appended, including modification of vc-tests.el. Comments? Best regards, Michael. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: diff --] [-- Type: text/x-patch, Size: 7217 bytes --] diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el index 0826744..dc7cc61 100644 --- a/lisp/vc/vc-hooks.el +++ b/lisp/vc/vc-hooks.el @@ -475,10 +475,11 @@ vc-state ;; FIXME: New (sub)states needed (?): ;; - `copied' and `moved' (might be handled by `removed' and `added') (or (vc-file-getprop file 'vc-state) + (and (not (vc-registered file)) 'unregistered) (when (> (length file) 0) ;Why?? --Stef (setq backend (or backend (vc-responsible-backend file))) (when backend - (vc-state-refresh file backend))))) + (vc-state-refresh file backend))))) (defun vc-state-refresh (file backend) "Quickly recompute the `state' of FILE." @@ -494,11 +495,12 @@ vc-working-revision "Return the repository version from which FILE was checked out. If FILE is not registered, this function always returns nil." (or (vc-file-getprop file 'vc-working-revision) - (progn - (setq backend (or backend (vc-responsible-backend file))) - (when backend - (vc-file-setprop file 'vc-working-revision - (vc-call-backend backend 'working-revision file)))))) + (and (vc-registered file) + (progn + (setq backend (or backend (vc-responsible-backend file))) + (when backend + (vc-file-setprop file 'vc-working-revision + (vc-call-backend backend 'working-revision file))))))) ;; Backward compatibility. (define-obsolete-function-alias diff --git a/test/automated/vc-tests.el b/test/automated/vc-tests.el index 2faa143..7f6196b 100644 --- a/test/automated/vc-tests.el +++ b/test/automated/vc-tests.el @@ -285,10 +285,9 @@ vc-test--state (make-directory default-directory) (vc-test--create-repo-function backend) - ;; nil: Hg Mtn RCS - ;; added: Git - ;; unregistered: CVS SCCS SRC - ;; up-to-date: Bzr SVN + ;; nil: RCS + ;; unregistered: Bzr CVS Git Hg Mtn SCCS SRC + ;; up-to-date: SVN (message "vc-state1 %s" (vc-state default-directory)) (should (eq (vc-state default-directory) (vc-state default-directory backend))) @@ -298,51 +297,43 @@ vc-test--state (let ((tmp-name (expand-file-name "foo" default-directory))) ;; Check state of an empty file. - ;; nil: Hg Mtn SRC SVN - ;; added: Git - ;; unregistered: RCS SCCS - ;; up-to-date: Bzr CVS + ;; unregistered: Bzr CVS Git Hg Mtn RCS SCCS SRC SVN (message "vc-state2 %s" (vc-state tmp-name)) (should (eq (vc-state tmp-name) (vc-state tmp-name backend))) - (should (memq (vc-state tmp-name) - '(nil added unregistered up-to-date))) + (should (eq (vc-state tmp-name) 'unregistered)) ;; Write a new file. Check state. (write-region "foo" nil tmp-name nil 'nomessage) - ;; nil: Mtn - ;; added: Git - ;; unregistered: Hg RCS SCCS SRC SVN - ;; up-to-date: Bzr CVS + ;; unregistered: Bzr CVS Git Hg Mtn RCS SCCS SRC SVN (message "vc-state3 %s" (vc-state tmp-name)) (should (eq (vc-state tmp-name) (vc-state tmp-name backend))) - (should (memq (vc-state tmp-name) - '(nil added unregistered up-to-date))) + (should (eq (vc-state tmp-name) 'unregistered)) ;; Register a file. Check state. (vc-register (list backend (list (file-name-nondirectory tmp-name)))) - ;; added: Git Mtn - ;; unregistered: Hg RCS SCCS SRC SVN - ;; up-to-date: Bzr CVS + ;; nil: SRC + ;; added: Bzr CVS Git Hg Mtn + ;; unregistered: SVN + ;; up-to-date: RCS SCCS (message "vc-state4 %s" (vc-state tmp-name)) (should (eq (vc-state tmp-name) (vc-state tmp-name backend))) - (should (memq (vc-state tmp-name) '(added unregistered up-to-date))) + (should (memq (vc-state tmp-name) + '(nil added unregistered up-to-date))) ;; Unregister the file. Check state. (condition-case nil (progn (vc-test--unregister-function backend tmp-name) - ;; added: Git - ;; unregistered: Hg RCS + ;; added: Bzr Git Hg ;; unsupported: CVS Mtn SCCS SRC SVN - ;; up-to-date: Bzr + ;; up-to-date: RCS (message "vc-state5 %s" (vc-state tmp-name)) (should (eq (vc-state tmp-name) (vc-state tmp-name backend))) - (should (memq (vc-state tmp-name) - '(added unregistered up-to-date)))) + (should (memq (vc-state tmp-name) '(added up-to-date)))) (vc-not-supported (message "vc-state5 unsupported"))))) ;; Save exit. @@ -370,8 +361,8 @@ vc-test--working-revision (make-directory default-directory) (vc-test--create-repo-function backend) - ;; nil: CVS Git Mtn RCS SCCS - ;; "0": Bzr Hg SRC SVN + ;; nil: Bzr CVS Git Hg Mtn RCS SCCS SRC + ;; "0": SVN (message "vc-working-revision1 %s" (vc-working-revision default-directory)) (should (eq (vc-working-revision default-directory) @@ -382,33 +373,32 @@ vc-test--working-revision ;; Check initial working revision, should be nil until ;; it's registered. - ;; nil: CVS Git Mtn RCS SCCS SVN - ;; "0": Bzr Hg SRC + ;; nil: Bzr CVS Git Hg Mtn RCS SCCS SRC SVN (message "vc-working-revision2 %s" (vc-working-revision tmp-name)) (should (eq (vc-working-revision tmp-name) (vc-working-revision tmp-name backend))) - (should (member (vc-working-revision tmp-name) '(nil "0"))) + (should-not (vc-working-revision tmp-name)) ;; Write a new file. Check working revision. (write-region "foo" nil tmp-name nil 'nomessage) - ;; nil: CVS Git Mtn RCS SCCS SVN - ;; "0": Bzr Hg SRC + ;; nil: Bzr CVS Git Hg Mtn RCS SCCS SRC SVN (message "vc-working-revision3 %s" (vc-working-revision tmp-name)) (should (eq (vc-working-revision tmp-name) (vc-working-revision tmp-name backend))) - (should (member (vc-working-revision tmp-name) '(nil "0"))) + (should-not (vc-working-revision tmp-name)) ;; Register a file. Check working revision. (vc-register (list backend (list (file-name-nondirectory tmp-name)))) - ;; nil: Mtn Git RCS SCCS + ;; nil: Git Mtn ;; "0": Bzr CVS Hg SRC SVN + ;; "1.1": RCS SCCS (message "vc-working-revision4 %s" (vc-working-revision tmp-name)) (should (eq (vc-working-revision tmp-name) (vc-working-revision tmp-name backend))) - (should (member (vc-working-revision tmp-name) '(nil "0"))) + (should (member (vc-working-revision tmp-name) '(nil "0" "1.1"))) ;; Unregister the file. Check working revision. (condition-case nil @@ -417,12 +407,13 @@ vc-test--working-revision ;; nil: Git RCS ;; "0": Bzr Hg + ;; "1.1": RCS ;; unsupported: CVS Mtn SCCS SRC SVN (message "vc-working-revision5 %s" (vc-working-revision tmp-name)) (should (eq (vc-working-revision tmp-name) (vc-working-revision tmp-name backend))) - (should (member (vc-working-revision tmp-name) '(nil "0")))) + (should (member (vc-working-revision tmp-name) '(nil "0" "1.1")))) (vc-not-supported (message "vc-working-revision5 unsupported"))))) ;; Save exit. ^ permalink raw reply related [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-13 15:14 ` Michael Albinus @ 2016-04-13 20:49 ` Dmitry Gutov 2016-04-14 7:21 ` Michael Albinus 0 siblings, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-13 20:49 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 Hey Michael, On 04/13/2016 06:14 PM, Michael Albinus wrote: > vc-working-revision shall return nil for unregistered files. vc-state > shall return a non-nil value, 'unregistered. That sounds fine to me in principle, but I don't think we can get there for Emacs 25.1, without paying with lower performance (*). The current code is slower than what's in 24.5 already, as a result of the aforementioned revision. > You cannot guarantee this. Anybody is free to call the functions with > unregistered files.And in the vc-state case, it is even documented that > this could happen. Both true. However, that vc-state's behavior has been different from its documentation in this regard, for many releases. >> In particular, it breaks an assumption I made when fixing #11757, that >> vc-git-state never receives an unregistered file as input. So if you >> evaluate (vc-state "1") now, it'll return `up-to-date'. > > This assumption could be kept if vc-state filters such unregistered > files out. Problem: vc-registered is slower than vc-backend. Like, orders of magnitude slower. vc-backend caches the result of the previous vc-registered invocation in vc-file-prop-obarray. But if we call vc-registered directly, we go the whole way each time, including calling vc-BACKEND-registered. Yes, both vc-state and vc-working-revision cache their results in a property, so we're only paying the added overhead when the file is opened, reverted, etc, but it's still a price. Don't you think it is a problem? > I've prepared a patch which just covers the case that a file is > unregistered, in both vc-state and vc-working-revision. It is a very > small change, that I believe it could still go into the emacs-25 branch. Aside from the above, is there a reason to keep using vc-responsible-backend instead of vc-backend, in vc-state and vc-working-revision? It's also slower than vc-backend. (*) If you _really_ think that vc-state should ever return `unregistered' (personally, I've never found that distinction useful; we could just as well update the docstring that it returns nil in that case), I think the way to get that is to make vc-git-registered return non-nil for all files inside Git-controlled repositories, and to make vc-git-state return `unregistered' for unregistered files (and same for other backends). But it would be a bigger change, better suitable for the next release. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-13 20:49 ` Dmitry Gutov @ 2016-04-14 7:21 ` Michael Albinus 2016-04-14 14:20 ` Dmitry Gutov 0 siblings, 1 reply; 41+ messages in thread From: Michael Albinus @ 2016-04-14 7:21 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: > Hey Michael, Hi Dmitry, > Problem: vc-registered is slower than vc-backend. Like, orders of > magnitude slower. vc-backend caches the result of the previous > vc-registered invocation in vc-file-prop-obarray. But if we call > vc-registered directly, we go the whole way each time, including > calling vc-BACKEND-registered. I haven't thought too much about performance. But you are right, we shouldn't add serious performance penalties to the code. And improving performance for the 25.1 release is much too late. So we might revert the patch for vc-state and vc-working-revision indeed for the emacs-25 branch, going back to using vc-backend. In the master branch we might apply my proposed patch using vc-registered or something similar, and start to improve performance. In parallel, we shall start to write a VCS section for the elisp manual, describing vc-* functionality in more detail. We could start with vc-backend and vc-responsible-backend and their intended use. I'm missing such documentation for years. I'll come back later today with the patch for emacs-25, if you agree. Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-14 7:21 ` Michael Albinus @ 2016-04-14 14:20 ` Dmitry Gutov 2016-04-14 18:31 ` Michael Albinus 0 siblings, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-14 14:20 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/14/2016 10:21 AM, Michael Albinus wrote: > I haven't thought too much about performance. But you are right, we > shouldn't add serious performance penalties to the code. And improving > performance for the 25.1 release is much too late. It's hard for me to judge how serious those are, really (I only have a fast laptop with GNU/Linux these days), but being wary of extra process calls seems prudent. Ideally, we'd reduce their number, not increase it. > So we might revert the patch for vc-state and vc-working-revision indeed > for the emacs-25 branch, going back to using vc-backend. Thanks, I agree. > In the master branch we might apply my proposed patch using > vc-registered or something similar, and start to improve performance. Improve how? Would you like to comment on the last paragraph of my previous email in this subthread? I don't really see a point in returning `unregistered' from `vc-state'. When would the caller treat it differently from nil? And returning nil seems like an easier choice, implementation-wise, and well as a more conservative one from the backward compatibility perspective. The `dir-status-files' backend command would continue including the `unregistered' entries (we could make it skip the up-to-date ones, though, in the interest of improving performance). > In > parallel, we shall start to write a VCS section for the elisp manual, > describing vc-* functionality in more detail. We could start with > vc-backend and vc-responsible-backend and their intended use. I'm > missing such documentation for years. I'd rather put the missing information into the docstrings, really. It seems unlikely that we're missing more than a few sentences in these two functions' descriptions, and we could also rephrase the existing ones. But if you'd be more comfortable with having that information in the manual as well, don't let me stop you. > I'll come back later today with the patch for emacs-25, if you agree. In any case, I definitely agree with reverting vc-state and vc-working-revision to use vc-backend in Emacs 25.1. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-14 14:20 ` Dmitry Gutov @ 2016-04-14 18:31 ` Michael Albinus 2016-04-15 0:20 ` Dmitry Gutov ` (2 more replies) 0 siblings, 3 replies; 41+ messages in thread From: Michael Albinus @ 2016-04-14 18:31 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: >> I haven't thought too much about performance. But you are right, we >> shouldn't add serious performance penalties to the code. And improving >> performance for the 25.1 release is much too late. > > It's hard for me to judge how serious those are, really (I only have a > fast laptop with GNU/Linux these days), but being wary of extra > process calls seems prudent. Ideally, we'd reduce their number, not > increase it. Yes. I hope we could use more file properties caches. To be investigated. >> So we might revert the patch for vc-state and vc-working-revision indeed >> for the emacs-25 branch, going back to using vc-backend. > > Thanks, I agree. I've committed this to emacs-25. Plus commenting the now failing checks in vc-tests.el. >> In the master branch we might apply my proposed patch using >> vc-registered or something similar, and start to improve performance. > > Improve how? Would you like to comment on the last paragraph of my > previous email in this subthread? You've proposed an interface change in vc-state, returning just nil instead of unregistered. Yes, this might be an option. Worth to be checked. Another possibility is to use cached properties more aggressively, as said above. > I don't really see a point in returning `unregistered' from > `vc-state'. When would the caller treat it differently from nil? And > returning nil seems like an easier choice, implementation-wise, and > well as a more conservative one from the backward compatibility > perspective. > > The `dir-status-files' backend command would continue including the > `unregistered' entries (we could make it skip the up-to-date ones, > though, in the interest of improving performance). I cannot comment about this today. And as said already several times, if we would document vc-* functions in the manual, it would allow us to have a more global view on proposed changes. I trust you that you have all involved interfaces in your mind. I haven't, and I would like to see how an interface change compares to the other interfaces. >> In >> parallel, we shall start to write a VCS section for the elisp manual, >> describing vc-* functionality in more detail. We could start with >> vc-backend and vc-responsible-backend and their intended use. I'm >> missing such documentation for years. > > I'd rather put the missing information into the docstrings, really. It > seems unlikely that we're missing more than a few sentences in these > two functions' descriptions, and we could also rephrase the existing > ones. > > But if you'd be more comfortable with having that information in the > manual as well, don't let me stop you. Maybe docstrings are already sufficient. But you have spoken about design decisions in the past (for example whether unregistered files could be an argument), which I believe is not documented. And at least for me the "global view" about vc-* functions is missing, and how they are related. >> I'll come back later today with the patch for emacs-25, if you agree. > > In any case, I definitely agree with reverting vc-state and > vc-working-revision to use vc-backend in Emacs 25.1. Yep. Pls test my patch, and confirm whether it is sufficient. Same for Glenn, if possible. I would like to close this bug then, removing a release blocker for Emacs 25.1. Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-14 18:31 ` Michael Albinus @ 2016-04-15 0:20 ` Dmitry Gutov 2016-04-15 13:11 ` Michael Albinus 2016-04-15 1:01 ` Dmitry Gutov 2016-04-18 1:33 ` Dmitry Gutov 2 siblings, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-15 0:20 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 [-- Attachment #1: Type: text/plain, Size: 331 bytes --] On 04/14/2016 09:31 PM, Michael Albinus wrote: > I've committed this to emacs-25. Plus commenting the now failing checks > in vc-tests.el. Thanks. Any objections to committing this follow-up patch? It makes the tests look a lot more meaningful, and it passes for all backends, AFAICT, but I don't have e.g. Monotone installed. [-- Attachment #2: vc-tests.diff --] [-- Type: text/x-patch, Size: 3082 bytes --] diff --git a/test/automated/vc-tests.el b/test/automated/vc-tests.el index 5042196..f9c0ce1 100644 --- a/test/automated/vc-tests.el +++ b/test/automated/vc-tests.el @@ -205,12 +205,10 @@ vc-test--create-repo (defun vc-test--unregister-function (backend file) "Run the `vc-unregister' backend function. For backends which dont support it, `vc-not-supported' is signalled." - - (let ((symbol (intern (downcase (format "vc-%s-unregister" backend))))) - (if (functionp symbol) - (funcall symbol file) - ;; CVS, SVN, SCCS, SRC and Mtn are not supported. - (signal 'vc-not-supported (list 'unregister backend))))) + ;; CVS, SVN, SCCS, SRC and Mtn are not supported, and will signal + ;; `vc-not-supported'. + (vc-call-backend backend 'unregister file) + (vc-file-clearprops file)) (defun vc-test--register (backend) "Register and unregister a file." @@ -289,6 +287,9 @@ vc-test--state ;; added: Git ;; unregistered: CVS SCCS SRC ;; up-to-date: Bzr SVN + ;; FIXME: Delete this check. A directory does not have a + ;; state, only files inside of it have states, and there is no way + ;; to combine those states into a single value unambiguously. (message "vc-state1 %s" (vc-state default-directory)) ;;(should (eq (vc-state default-directory) ;;(vc-state default-directory backend))) @@ -305,7 +306,7 @@ vc-test--state (message "vc-state2 %s" (vc-state tmp-name)) ;;(should (eq (vc-state tmp-name) (vc-state tmp-name backend))) (should (memq (vc-state tmp-name) - '(nil added unregistered up-to-date))) + '(nil))) ;; Write a new file. Check state. (write-region "foo" nil tmp-name nil 'nomessage) @@ -317,19 +318,19 @@ vc-test--state (message "vc-state3 %s" (vc-state tmp-name)) ;;(should (eq (vc-state tmp-name) (vc-state tmp-name backend))) (should (memq (vc-state tmp-name) - '(nil added unregistered up-to-date))) + '(nil))) ;; Register a file. Check state. (vc-register - (list backend (list (file-name-nondirectory tmp-name)))) + (list backend (list tmp-name))) ;; added: Git Mtn ;; unregistered: Hg RCS SCCS SRC SVN ;; up-to-date: Bzr CVS (message "vc-state4 %s" (vc-state tmp-name)) - ;;(should (eq (vc-state tmp-name) (vc-state tmp-name backend))) + (should (eq (vc-state tmp-name) (vc-state tmp-name backend))) (should (memq (vc-state tmp-name) - '(nil added unregistered up-to-date))) + '(added up-to-date))) ;; Unregister the file. Check state. (condition-case nil @@ -343,7 +344,7 @@ vc-test--state (message "vc-state5 %s" (vc-state tmp-name)) ;;(should (eq (vc-state tmp-name) (vc-state tmp-name backend))) (should (memq (vc-state tmp-name) - '(nil added unregistered up-to-date)))) + '(nil unregistered)))) (vc-not-supported (message "vc-state5 unsupported"))))) ;; Save exit. ^ permalink raw reply related [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-15 0:20 ` Dmitry Gutov @ 2016-04-15 13:11 ` Michael Albinus 2016-04-17 0:44 ` Dmitry Gutov 2016-04-18 1:40 ` Dmitry Gutov 0 siblings, 2 replies; 41+ messages in thread From: Michael Albinus @ 2016-04-15 13:11 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: > Thanks. Any objections to committing this follow-up patch? > > It makes the tests look a lot more meaningful, and it passes for all > backends, AFAICT, but I don't have e.g. Monotone installed. I would prefer to apply further patches to the master branch only. Only patches absolutely necessary for fixing problems shall go to the emacs-25 branch, in order not to threaten the release. After applying your patch, vc-tests.el fails for me in vc-test-src02-state and vc-test-rcs03-working-revision. > @@ -205,12 +205,10 @@ vc-test--create-repo > (defun vc-test--unregister-function (backend file) > "Run the `vc-unregister' backend function. > For backends which dont support it, `vc-not-supported' is signalled." > - > - (let ((symbol (intern (downcase (format "vc-%s-unregister" backend))))) > - (if (functionp symbol) > - (funcall symbol file) > - ;; CVS, SVN, SCCS, SRC and Mtn are not supported. > - (signal 'vc-not-supported (list 'unregister backend))))) > + ;; CVS, SVN, SCCS, SRC and Mtn are not supported, and will signal > + ;; `vc-not-supported'. > + (vc-call-backend backend 'unregister file) > + (vc-file-clearprops file)) As said, in the master branch I would prefer to add a vc-unregister function. Then we won't need this anymore. Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-15 13:11 ` Michael Albinus @ 2016-04-17 0:44 ` Dmitry Gutov 2016-04-18 12:27 ` Michael Albinus 2016-04-18 1:40 ` Dmitry Gutov 1 sibling, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-17 0:44 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/15/2016 04:11 PM, Michael Albinus wrote: > I would prefer to apply further patches to the master branch only. Only > patches absolutely necessary for fixing problems shall go to the > emacs-25 branch, in order not to threaten the release. I can do that. > After applying your patch, vc-tests.el fails for me in vc-test-src02-state How do you install src? Do you build it from source? > and vc-test-rcs03-working-revision. This one (failure in vc-checkout-model5) seems to be a real bug uncovered by using vc-file-clearprops. I suppose we should add a FIXME there and skip that check for RCS. >> - (let ((symbol (intern (downcase (format "vc-%s-unregister" backend))))) >> - (if (functionp symbol) >> - (funcall symbol file) >> - ;; CVS, SVN, SCCS, SRC and Mtn are not supported. >> - (signal 'vc-not-supported (list 'unregister backend))))) >> + ;; CVS, SVN, SCCS, SRC and Mtn are not supported, and will signal >> + ;; `vc-not-supported'. >> + (vc-call-backend backend 'unregister file) >> + (vc-file-clearprops file)) > > As said, in the master branch I would prefer to add a vc-unregister > function. Then we won't need this anymore. We'll need this code either way. Where the function resides and how it is called is less important to me. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-17 0:44 ` Dmitry Gutov @ 2016-04-18 12:27 ` Michael Albinus 2016-04-18 12:33 ` Dmitry Gutov 0 siblings, 1 reply; 41+ messages in thread From: Michael Albinus @ 2016-04-18 12:27 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: >> After applying your patch, vc-tests.el fails for me in vc-test-src02-state > > How do you install src? Do you build it from source? I've checked it out from <https://gitorious.org/src-vcs/src-vcs.git>. See the README / INSTALL files. >> and vc-test-rcs03-working-revision. > > This one (failure in vc-checkout-model5) seems to be a real bug > uncovered by using vc-file-clearprops. I suppose we should add a FIXME > there and skip that check for RCS. I'm also thinking about how to solve it (in master). vc-checkout-model knows only three answers, implicit, locking and announce. I will ask on emacs-devel, what is appropriate for RCS, and fix it then. >> As said, in the master branch I would prefer to add a vc-unregister >> function. Then we won't need this anymore. > > We'll need this code either way. Where the function resides and how it > is called is less important to me. For the time being, I have applied this part of your patch locally (not pushed yet to savannah). Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-18 12:27 ` Michael Albinus @ 2016-04-18 12:33 ` Dmitry Gutov 2016-04-18 12:46 ` Michael Albinus 0 siblings, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-18 12:33 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/18/2016 03:27 PM, Michael Albinus wrote: > I've checked it out from <https://gitorious.org/src-vcs/src-vcs.git>. > See the README / INSTALL files. OK, thanks. > I'm also thinking about how to solve it (in master). vc-checkout-model > knows only three answers, implicit, locking and announce. I will ask on > emacs-devel, what is appropriate for RCS, and fix it then. Sorry, the failure was in working-revision5, I think. So it's unrelated to checkout-model. Anyway, I don't see it with the latest patch. >>> As said, in the master branch I would prefer to add a vc-unregister >>> function. Then we won't need this anymore. >> >> We'll need this code either way. Where the function resides and how it >> is called is less important to me. > > For the time being, I have applied this part of your patch locally (not > pushed yet to savannah). Just the usage of vc-file-clearprops? Why? Anyway, I've sent a better patch yesterday. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-18 12:33 ` Dmitry Gutov @ 2016-04-18 12:46 ` Michael Albinus 0 siblings, 0 replies; 41+ messages in thread From: Michael Albinus @ 2016-04-18 12:46 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: >> I'm also thinking about how to solve it (in master). vc-checkout-model >> knows only three answers, implicit, locking and announce. I will ask on >> emacs-devel, what is appropriate for RCS, and fix it then. > > Sorry, the failure was in working-revision5, I think. So it's > unrelated to checkout-model. Ah, sorry. But there is also an error with RCS and checkout-model. That's why Glenn has marked vc-test-rcs04-checkout-model as expected to fail a while ago. >> For the time being, I have applied this part of your patch locally (not >> pushed yet to savannah). > > Just the usage of vc-file-clearprops? Why? Also the use of vc-call-backend. I didn't know that. > Anyway, I've sent a better patch yesterday. Yes, it's on my todo. I'm handling easy-to-answer messages first :-) Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-15 13:11 ` Michael Albinus 2016-04-17 0:44 ` Dmitry Gutov @ 2016-04-18 1:40 ` Dmitry Gutov 1 sibling, 0 replies; 41+ messages in thread From: Dmitry Gutov @ 2016-04-18 1:40 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 [-- Attachment #1: Type: text/plain, Size: 570 bytes --] On 04/15/2016 04:11 PM, Michael Albinus wrote: > I would prefer to apply further patches to the master branch only. Only > patches absolutely necessary for fixing problems shall go to the > emacs-25 branch, in order not to threaten the release. > > After applying your patch, vc-tests.el fails for me in vc-test-src02-state > and vc-test-rcs03-working-revision. Here's the patch against master. The latter one doesn't fail there. Could you handle the SRC test failure yourself? Either by fixing the relevant code, or by simply exempting SRC from the relevant check. [-- Attachment #2: vc-backend-and-vc-tests.diff --] [-- Type: text/x-patch, Size: 7978 bytes --] diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el index 4c0161d..43cbb3f 100644 --- a/lisp/vc/vc-hooks.el +++ b/lisp/vc/vc-hooks.el @@ -476,7 +476,7 @@ vc-state ;; - `copied' and `moved' (might be handled by `removed' and `added') (or (vc-file-getprop file 'vc-state) (when (> (length file) 0) ;Why?? --Stef - (setq backend (or backend (vc-responsible-backend file))) + (setq backend (or backend (vc-backend file))) (when backend (vc-state-refresh file backend))))) @@ -495,7 +495,7 @@ vc-working-revision If FILE is not registered, this function always returns nil." (or (vc-file-getprop file 'vc-working-revision) (progn - (setq backend (or backend (vc-responsible-backend file))) + (setq backend (or backend (vc-backend file))) (when backend (vc-file-setprop file 'vc-working-revision (vc-call-backend backend 'working-revision file)))))) diff --git a/test/lisp/vc/vc-tests.el b/test/lisp/vc/vc-tests.el index 2b3445a..cabd560 100644 --- a/test/lisp/vc/vc-tests.el +++ b/test/lisp/vc/vc-tests.el @@ -205,16 +205,10 @@ vc-test--create-repo (defun vc-test--unregister-function (backend file) "Run the `vc-unregister' backend function. For backends which dont support it, `vc-not-supported' is signalled." - - (unwind-protect - (let ((symbol (intern (downcase (format "vc-%s-unregister" backend))))) - (if (functionp symbol) - (funcall symbol file) - ;; CVS, SVN, SCCS, SRC and Mtn are not supported. - (signal 'vc-not-supported (list 'unregister backend)))) - - ;; FIXME This shall be called in `vc-unregister'. - (vc-file-clearprops file))) + ;; CVS, SVN, SCCS, SRC and Mtn are not supported, and will signal + ;; `vc-not-supported'. + (vc-call-backend backend 'unregister file) + (vc-file-clearprops file)) (defun vc-test--register (backend) "Register and unregister a file. @@ -312,43 +306,30 @@ vc-test--state 'vc-test--cleanup-hook `(lambda () (delete-directory ,default-directory 'recursive))) - ;; Create empty repository. Check repository state. + ;; Create empty repository. (make-directory default-directory) (vc-test--create-repo-function backend) - ;; nil: Hg Mtn RCS - ;; added: Git - ;; unregistered: CVS SCCS SRC - ;; up-to-date: Bzr SVN - (message "vc-state1 %s" (vc-state default-directory)) - (should (eq (vc-state default-directory) - (vc-state default-directory backend))) - (should (memq (vc-state default-directory) - '(nil added unregistered up-to-date))) - (let ((tmp-name (expand-file-name "foo" default-directory))) - ;; Check state of an empty file. + ;; Check state of a nonexistent file. - ;; nil: Hg Mtn SRC SVN + (message "vc-state2 %s" (vc-state tmp-name)) + ;; FIXME: ;; added: Git ;; unregistered: RCS SCCS ;; up-to-date: Bzr CVS - (message "vc-state2 %s" (vc-state tmp-name)) - (should (eq (vc-state tmp-name) (vc-state tmp-name backend))) - (should (memq (vc-state tmp-name) - '(nil added unregistered up-to-date))) + ;; (should (eq (vc-state tmp-name) (vc-state tmp-name backend))) + (should (null (vc-state tmp-name))) ;; Write a new file. Check state. (write-region "foo" nil tmp-name nil 'nomessage) - ;; nil: Mtn - ;; added: Git - ;; unregistered: Hg RCS SCCS SRC SVN - ;; up-to-date: Bzr CVS (message "vc-state3 %s" (vc-state tmp-name)) - (should (eq (vc-state tmp-name) (vc-state tmp-name backend))) - (should (memq (vc-state tmp-name) - '(nil added unregistered up-to-date))) + ;; FIXME: + ;; added: Git + ;; unregistered: Bzr Hg RCS SCCS SRC SVN CVS + ;; (should (eq (vc-state tmp-name) (vc-state tmp-name backend))) + (should (null (vc-state tmp-name))) ;; Register a file. Check state. (vc-register @@ -359,21 +340,20 @@ vc-test--state ;; up-to-date: Bzr CVS (message "vc-state4 %s" (vc-state tmp-name)) (should (eq (vc-state tmp-name) (vc-state tmp-name backend))) - (should (memq (vc-state tmp-name) '(added unregistered up-to-date))) + (should (memq (vc-state tmp-name) '(added up-to-date))) ;; Unregister the file. Check state. (condition-case err (progn (vc-test--unregister-function backend tmp-name) - ;; added: Git - ;; unregistered: Hg RCS ;; unsupported: CVS Mtn SCCS SRC SVN - ;; up-to-date: Bzr (message "vc-state5 %s" (vc-state tmp-name)) - (should (eq (vc-state tmp-name) (vc-state tmp-name backend))) - (should (memq (vc-state tmp-name) - '(added unregistered up-to-date)))) + ;; FIXME: + ;; added: Git + ;; unregistered: Hg RCS Bzr + ;; (should (eq (vc-state tmp-name) (vc-state tmp-name backend))) + (should (null (vc-state tmp-name)))) (vc-not-supported (message "vc-state5 unsupported")) (t (signal (car err) (cdr err)))))) @@ -406,8 +386,8 @@ vc-test--working-revision ;; "0": Bzr Hg SRC SVN (message "vc-working-revision1 %s" (vc-working-revision default-directory)) - (should (eq (vc-working-revision default-directory) - (vc-working-revision default-directory backend))) + ;; (should (eq (vc-working-revision default-directory) + ;; (vc-working-revision default-directory backend))) (should (member (vc-working-revision default-directory) '(nil "0"))) (let ((tmp-name (expand-file-name "foo" default-directory))) @@ -417,8 +397,8 @@ vc-test--working-revision ;; nil: CVS Git Mtn RCS SCCS SVN ;; "0": Bzr Hg SRC (message "vc-working-revision2 %s" (vc-working-revision tmp-name)) - (should (eq (vc-working-revision tmp-name) - (vc-working-revision tmp-name backend))) + ;; (should (eq (vc-working-revision tmp-name) + ;; (vc-working-revision tmp-name backend))) (should (member (vc-working-revision tmp-name) '(nil "0"))) ;; Write a new file. Check working revision. @@ -427,8 +407,8 @@ vc-test--working-revision ;; nil: CVS Git Mtn RCS SCCS SVN ;; "0": Bzr Hg SRC (message "vc-working-revision3 %s" (vc-working-revision tmp-name)) - (should (eq (vc-working-revision tmp-name) - (vc-working-revision tmp-name backend))) + ;; (should (eq (vc-working-revision tmp-name) + ;; (vc-working-revision tmp-name backend))) (should (member (vc-working-revision tmp-name) '(nil "0"))) ;; Register a file. Check working revision. @@ -439,22 +419,22 @@ vc-test--working-revision ;; "0": Bzr CVS Hg SRC SVN ;; "1.1" RCS SCCS (message "vc-working-revision4 %s" (vc-working-revision tmp-name)) - (should (eq (vc-working-revision tmp-name) - (vc-working-revision tmp-name backend))) + ;; (should (eq (vc-working-revision tmp-name) + ;; (vc-working-revision tmp-name backend))) (should (member (vc-working-revision tmp-name) '(nil "0" "1.1"))) ;; Unregister the file. Check working revision. (condition-case err (progn - (vc-test--unregister-function backend tmp-name) + (vc-test--unregister-function backend tmp-name) ;; nil: Git RCS ;; "0": Bzr Hg ;; unsupported: CVS Mtn SCCS SRC SVN (message "vc-working-revision5 %s" (vc-working-revision tmp-name)) - (should (eq (vc-working-revision tmp-name) - (vc-working-revision tmp-name backend))) + ;; (should (eq (vc-working-revision tmp-name) + ;; (vc-working-revision tmp-name backend))) (should (member (vc-working-revision tmp-name) '(nil "0")))) (vc-not-supported (message "vc-working-revision5 unsupported")) (t (signal (car err) (cdr err)))))) ^ permalink raw reply related [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-14 18:31 ` Michael Albinus 2016-04-15 0:20 ` Dmitry Gutov @ 2016-04-15 1:01 ` Dmitry Gutov 2016-04-15 1:04 ` Dmitry Gutov 2016-04-15 13:23 ` Michael Albinus 2016-04-18 1:33 ` Dmitry Gutov 2 siblings, 2 replies; 41+ messages in thread From: Dmitry Gutov @ 2016-04-15 1:01 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/14/2016 09:31 PM, Michael Albinus wrote: > Yes. I hope we could use more file properties caches. To be investigated. OK, that could be a fine solution to the problem of vc-registered's slowness, but it adds complexity. So I'm still in favor of equating `unregistered' with nil, . > And as said already several times, if > we would document vc-* functions in the manual, it would allow us to > have a more global view on proposed changes. I disagree. The manual is the documentation for the users, to explain in depth, give examples, et cetera. The docstrings and VC's internal documentation have to stand on their own. It would be silly if the difference between `vc-backend' and `vc-responsible-backend' were to only be explained in the manual, but not in the docstrings. That would also be unfair to people such as myself who prefer to consult the latter. So, do you need anything from me in this area? E.g., feel free to give a list of docstrings that seem insufficient to you, together with what you feel they are missing. > I trust you that you have > all involved interfaces in your mind. I haven't, and I would like to see > how an interface change compares to the other interfaces. I don't really know everything about VC, I just have some recollections about dealing with it, as well as experience writing a third-party package depending on VC's API. To get an opinion about the current bug report, I still had to dig into the code and investigate, look at the commit history, search for call occurrences, etc. > But you have spoken about > design decisions in the past (for example whether unregistered files > could be an argument), which I believe is not documented. BTW, we've mentioned it before when fixing my old bug report about VC using too many process calls (http://debbugs.gnu.org/cgi/bugreport.cgi?bug=11757#77). It may not have even been a deliberate design decision, but it's the way `vc-state' is used. Which, in turn, allows backend implementations to be sloppy in the cases that are (almost?) never exercised. > And at least for me the "global view" about vc-* functions is missing, > and how they are related. I usually tease that kind of information out by reading the source code. Is there anything in particular I could help add to your understanding of the "global view"? > Yep. Pls test my patch, and confirm whether it is sufficient. Same for > Glenn, if possible. I would like to close this bug then, removing a > release blocker for Emacs 25.1. It must fix this bug, since it reverts to the old code, and testing Glenn's example from the description confirms as much. So I think it can be closed, and the discussion should move to emacs-devel. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-15 1:01 ` Dmitry Gutov @ 2016-04-15 1:04 ` Dmitry Gutov 2016-04-15 13:23 ` Michael Albinus 1 sibling, 0 replies; 41+ messages in thread From: Dmitry Gutov @ 2016-04-15 1:04 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/15/2016 04:01 AM, Dmitry Gutov wrote: > So I'm still in favor of equating > `unregistered' with nil, . ...pending further arguments in favor of the other solution. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-15 1:01 ` Dmitry Gutov 2016-04-15 1:04 ` Dmitry Gutov @ 2016-04-15 13:23 ` Michael Albinus 2016-04-17 0:27 ` Dmitry Gutov 1 sibling, 1 reply; 41+ messages in thread From: Michael Albinus @ 2016-04-15 13:23 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: > On 04/14/2016 09:31 PM, Michael Albinus wrote: > >> Yes. I hope we could use more file properties caches. To be investigated. > > OK, that could be a fine solution to the problem of vc-registered's > slowness, but it adds complexity. So I'm still in favor of equating > `unregistered' with nil, . I'm not against this. But I would like to see the whole picture first. Where else unregistered is used, and whether we run into conflicts when using nil instead of unregistered. >> And as said already several times, if >> we would document vc-* functions in the manual, it would allow us to >> have a more global view on proposed changes. > > I disagree. The manual is the documentation for the users, to explain > in depth, give examples, et cetera. The docstrings and VC's internal > documentation have to stand on their own. It would be silly if the > difference between `vc-backend' and `vc-responsible-backend' were to > only be explained in the manual, but not in the docstrings. Are we speaking about different manuals? I'm speaking about the ‘GNU Emacs Lisp Reference Manual’, and not the ‘GNU Emacs Manual’ (the manual dedicated to users). > That would also be unfair to people such as myself who prefer to > consult the latter. With your argument, we could nuke the Emacs Lisp manual. Shall we? > So, do you need anything from me in this area? E.g., feel free to give > a list of docstrings that seem insufficient to you, together with what > you feel they are missing. I will start somehow, and show you for review. >> I trust you that you have all involved interfaces in your mind. I >> haven't, and I would like to see how an interface change compares to >> the other interfaces. > > I don't really know everything about VC, I just have some > recollections about dealing with it, as well as experience writing a > third-party package depending on VC's API. > > To get an opinion about the current bug report, I still had to dig > into the code and investigate, look at the commit history, search for > call occurrences, etc. My first sentence above is a rhetorical one, of course :-) >> But you have spoken about >> design decisions in the past (for example whether unregistered files >> could be an argument), which I believe is not documented. > > BTW, we've mentioned it before when fixing my old bug report about VC > using too many process calls > (http://debbugs.gnu.org/cgi/bugreport.cgi?bug=11757#77). Yes, but that's not the documentation! I'm pretty good in forgetting everything, and I don't remember what was said in message 77 of bug report 11757, months ago ... > It may not have even been a deliberate design decision, but it's the > way `vc-state' is used. Which, in turn, allows backend implementations > to be sloppy in the cases that are (almost?) never exercised. > >> And at least for me the "global view" about vc-* functions is missing, >> and how they are related. > > I usually tease that kind of information out by reading the source > code. Is there anything in particular I could help add to your > understanding of the "global view"? Even if I understand it, it won't help any other developer. Let's document it. >> Yep. Pls test my patch, and confirm whether it is sufficient. Same for >> Glenn, if possible. I would like to close this bug then, removing a >> release blocker for Emacs 25.1. > > It must fix this bug, since it reverts to the old code, and testing > Glenn's example from the description confirms as much. > > So I think it can be closed, and the discussion should move to emacs-devel. OK, I'm waiting for some few days (maybe Glenn want to say something about), and then I'll close this bug. Thanks for all your help this way! Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-15 13:23 ` Michael Albinus @ 2016-04-17 0:27 ` Dmitry Gutov 0 siblings, 0 replies; 41+ messages in thread From: Dmitry Gutov @ 2016-04-17 0:27 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/15/2016 04:23 PM, Michael Albinus wrote: > I'm not against this. But I would like to see the whole picture > first. Where else unregistered is used, and whether we run into > conflicts when using nil instead of unregistered. Sure. I'm reasonably confident, but please take the time and do your own evaluation. >> I disagree. The manual is the documentation for the users, to explain >> in depth, give examples, et cetera. The docstrings and VC's internal >> documentation have to stand on their own. It would be silly if the >> difference between `vc-backend' and `vc-responsible-backend' were to >> only be explained in the manual, but not in the docstrings. > > Are we speaking about different manuals? I'm speaking about the ‘GNU > Emacs Lisp Reference Manual’, and not the ‘GNU Emacs Manual’ (the manual > dedicated to users). I've split off a tangent to emacs-devel. Emacs Lisp Reference is a counter-example, but I think the last sentence in my paragraph above is still correct. VC has been documented in the docstrings and the Commentary sections (especially the one at the begining of vc.el). The new important information should go there first. If then you'd like to create a manual based on that information, to present it in more digestible form, sure, but let's not put anything essential into the manual only. We might avoid publishing that manual, though, until we're sure that VC is rock-solid to build third-party code on. >> That would also be unfair to people such as myself who prefer to >> consult the latter. > > With your argument, we could nuke the Emacs Lisp manual. Shall we? Does your argument allow nuking all docstrings and comments? >> So, do you need anything from me in this area? E.g., feel free to give >> a list of docstrings that seem insufficient to you, together with what >> you feel they are missing. > > I will start somehow, and show you for review. Thanks. >> I usually tease that kind of information out by reading the source >> code. Is there anything in particular I could help add to your >> understanding of the "global view"? > > Even if I understand it, it won't help any other developer. Let's > document it. Sure. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-14 18:31 ` Michael Albinus 2016-04-15 0:20 ` Dmitry Gutov 2016-04-15 1:01 ` Dmitry Gutov @ 2016-04-18 1:33 ` Dmitry Gutov 2016-04-18 12:28 ` Michael Albinus 2 siblings, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-18 1:33 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/14/2016 09:31 PM, Michael Albinus wrote: > I've committed this to emacs-25. Plus commenting the now failing checks > in vc-tests.el. We should also consider reverting the changes to vc-rcs-unregister and vc-sccs-working-revision. They don't seem particularly necessary (the tests pass without them). ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-18 1:33 ` Dmitry Gutov @ 2016-04-18 12:28 ` Michael Albinus 2016-04-18 12:37 ` Dmitry Gutov 0 siblings, 1 reply; 41+ messages in thread From: Michael Albinus @ 2016-04-18 12:28 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: >> I've committed this to emacs-25. Plus commenting the now failing checks >> in vc-tests.el. > > We should also consider reverting the changes to vc-rcs-unregister and > vc-sccs-working-revision. They don't seem particularly necessary (the > tests pass without them). As you know I'm conservative with the emacs-25 branch. Is it absolutely necessary that we do this? Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-18 12:28 ` Michael Albinus @ 2016-04-18 12:37 ` Dmitry Gutov 2016-04-18 12:53 ` Michael Albinus 0 siblings, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-18 12:37 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/18/2016 03:28 PM, Michael Albinus wrote: > As you know I'm conservative with the emacs-25 branch. Is it absolutely > necessary that we do this? It would be a revert to the code that has been in use for a while. Nothing absolutely necessary about that, but it might be prudent to revert the changes made without clear understanding why they should be made. Please correct me on this if I'm wrong, of course. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-18 12:37 ` Dmitry Gutov @ 2016-04-18 12:53 ` Michael Albinus 2016-04-18 12:58 ` Dmitry Gutov 2016-04-18 16:34 ` John Wiegley 0 siblings, 2 replies; 41+ messages in thread From: Michael Albinus @ 2016-04-18 12:53 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637 Dmitry Gutov <dgutov@yandex.ru> writes: > On 04/18/2016 03:28 PM, Michael Albinus wrote: > >> As you know I'm conservative with the emacs-25 branch. Is it absolutely >> necessary that we do this? > > It would be a revert to the code that has been in use for a while. The current code has been in use for 11 months. Beside this bug report, nobody has worried about that. And the problems this bug report speaks about are solved, I believe. > Nothing absolutely necessary about that, but it might be prudent to > revert the changes made without clear understanding why they should be > made. Please correct me on this if I'm wrong, of course. Again, it is a matter of not touching code so close to a release. 35+ years experience in software development tell me so. Often enough I've changed just one single line, because "it is obvious it cannot be wrong". Haha. Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-18 12:53 ` Michael Albinus @ 2016-04-18 12:58 ` Dmitry Gutov 2016-04-18 13:06 ` Michael Albinus 2016-04-18 16:34 ` John Wiegley 1 sibling, 1 reply; 41+ messages in thread From: Dmitry Gutov @ 2016-04-18 12:58 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637 On 04/18/2016 03:53 PM, Michael Albinus wrote: >> It would be a revert to the code that has been in use for a while. > > The current code has been in use for 11 months. Beside this bug report, > nobody has worried about that. And the problems this bug report speaks > about are solved, I believe. They are. >> Nothing absolutely necessary about that, but it might be prudent to >> revert the changes made without clear understanding why they should be >> made. Please correct me on this if I'm wrong, of course. > > Again, it is a matter of not touching code so close to a release. 35+ > years experience in software development tell me so. Often enough I've > changed just one single line, because "it is obvious it cannot be > wrong". Haha. Fair enough. We can revert them on master, though. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-18 12:58 ` Dmitry Gutov @ 2016-04-18 13:06 ` Michael Albinus 0 siblings, 0 replies; 41+ messages in thread From: Michael Albinus @ 2016-04-18 13:06 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20637-done Version: 25.1 Dmitry Gutov <dgutov@yandex.ru> writes: >> The current code has been in use for 11 months. Beside this bug report, >> nobody has worried about that. And the problems this bug report speaks >> about are solved, I believe. > > They are. So I'm closing this bug. Further discussion shall start on emacs-devel in a *new* thread. This bug report has served its purpose. Best regards, Michael. ^ permalink raw reply [flat|nested] 41+ messages in thread
* bug#20637: incompatible, undocumented change to vc-working-revision 2016-04-18 12:53 ` Michael Albinus 2016-04-18 12:58 ` Dmitry Gutov @ 2016-04-18 16:34 ` John Wiegley 1 sibling, 0 replies; 41+ messages in thread From: John Wiegley @ 2016-04-18 16:34 UTC (permalink / raw) To: Michael Albinus; +Cc: 20637, Dmitry Gutov [-- Attachment #1: Type: text/plain, Size: 509 bytes --] >>>>> Michael Albinus <michael.albinus@gmx.de> writes: > Again, it is a matter of not touching code so close to a release. 35+ years > experience in software development tell me so. Often enough I've changed > just one single line, because "it is obvious it cannot be wrong". Haha. I simply couldn't agree with you more on this one, Michael. :) -- John Wiegley GPG fingerprint = 4710 CF98 AF9B 327B B80F http://newartisans.com 60E1 46C4 BD1A 7AC1 4BA2 [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 629 bytes --] ^ permalink raw reply [flat|nested] 41+ messages in thread
end of thread, other threads:[~2016-04-18 16:34 UTC | newest] Thread overview: 41+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-05-23 23:49 bug#20637: incompatible, undocumented change to vc-working-revision Glenn Morris 2016-03-28 23:28 ` Dmitry Gutov 2016-03-29 18:13 ` Michael Albinus 2016-04-01 0:36 ` Dmitry Gutov 2016-04-09 19:34 ` Michael Albinus 2016-04-09 20:42 ` Dmitry Gutov 2016-04-10 8:00 ` Michael Albinus 2016-04-10 16:00 ` Dmitry Gutov 2016-04-10 18:09 ` Michael Albinus 2016-04-10 18:58 ` Dmitry Gutov 2016-04-11 6:55 ` Michael Albinus 2016-04-13 20:55 ` Dmitry Gutov 2016-04-14 7:10 ` Michael Albinus 2016-04-14 13:53 ` Dmitry Gutov 2016-04-14 15:26 ` Michael Albinus 2016-04-15 0:33 ` Dmitry Gutov 2016-04-15 13:13 ` Michael Albinus 2016-04-14 15:23 ` Eli Zaretskii 2016-04-13 15:14 ` Michael Albinus 2016-04-13 20:49 ` Dmitry Gutov 2016-04-14 7:21 ` Michael Albinus 2016-04-14 14:20 ` Dmitry Gutov 2016-04-14 18:31 ` Michael Albinus 2016-04-15 0:20 ` Dmitry Gutov 2016-04-15 13:11 ` Michael Albinus 2016-04-17 0:44 ` Dmitry Gutov 2016-04-18 12:27 ` Michael Albinus 2016-04-18 12:33 ` Dmitry Gutov 2016-04-18 12:46 ` Michael Albinus 2016-04-18 1:40 ` Dmitry Gutov 2016-04-15 1:01 ` Dmitry Gutov 2016-04-15 1:04 ` Dmitry Gutov 2016-04-15 13:23 ` Michael Albinus 2016-04-17 0:27 ` Dmitry Gutov 2016-04-18 1:33 ` Dmitry Gutov 2016-04-18 12:28 ` Michael Albinus 2016-04-18 12:37 ` Dmitry Gutov 2016-04-18 12:53 ` Michael Albinus 2016-04-18 12:58 ` Dmitry Gutov 2016-04-18 13:06 ` Michael Albinus 2016-04-18 16:34 ` John Wiegley
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).