Summary: | sys-apps/portage-2.2_rc23: repoman commit fails to commit files in CVS subdirectories when checked out without -P | ||
---|---|---|---|
Product: | Portage Development | Reporter: | Harald van Dijk (RETIRED) <truedfx> |
Component: | Repoman | Assignee: | Portage team <dev-portage> |
Status: | RESOLVED FIXED | ||
Severity: | major | CC: | anarchy, caster, idl0r, loki_val, serkan |
Priority: | High | Keywords: | InVCS |
Version: | 2.2 | ||
Hardware: | All | ||
OS: | Linux | ||
Whiteboard: | |||
Package list: | Runtime testing required: | --- | |
Bug Depends on: | |||
Bug Blocks: | 210077, 288499 | ||
Attachments: | cvstree.py.patch |
Description
Harald van Dijk (RETIRED)
![]() This caused bug #257538 while trying to fix #257299, by the way. Bug 258584 seems to be another case. http://bugs.gentoo.org/show_bug.cgi?id=258670 looks yet like another bug due to portage 2.2_rcX Repoman's code hasn't changed, and it just calls `cvs commit` (relies on cvs to decide which files to send). Adding cvs-utils@ to CC in case they have any insight. Can you please show me the output of 'cvs up' in both variants of your directories? Also include your ~/.cvsrc file. (In reply to comment #5) > Can you please show me the output of 'cvs up' in both variants of your > directories? [gcc-without-P] Enter passphrase for key '/home/harald/.ssh/id_dsa': cvs update: Updating . cvs update: Updating files M files/c89 cvs update: Updating files/2.95.3 cvs update: Updating files/3.0 cvs update: Updating files/3.1 cvs update: Updating files/3.1.1 cvs update: Updating files/3.2 cvs update: Updating files/3.2.1 cvs update: Updating files/3.2.2 cvs update: Updating files/3.2.3 cvs update: Updating files/3.3 cvs update: Updating files/3.3.1 cvs update: Updating files/3.3.2 cvs update: Updating files/3.3.3 cvs update: Updating files/3.3.4 cvs update: Updating files/3.3.5 cvs update: Updating files/3.3.6 cvs update: Updating files/3.4.0 cvs update: Updating files/3.4.1 cvs update: Updating files/3.4.2 cvs update: Updating files/3.4.3 cvs update: Updating files/3.4.4 cvs update: Updating files/4.0.2 cvs update: Updating files/4.1.0 cvs update: Updating files/4.3.2 cvs update: Updating files/awk cvs update: Updating files/gcc-2.96.20000731 cvs update: Updating files/stubs [gcc-with-P] Enter passphrase for key '/home/harald/.ssh/id_dsa': cvs update: Updating . cvs update: Updating files M files/c89 cvs update: Updating files/3.2.1 cvs update: Updating files/3.2.2 cvs update: Updating files/3.2.3 cvs update: Updating files/3.3.4 cvs update: Updating files/3.3.6 cvs update: Updating files/3.4.0 cvs update: Updating files/3.4.1 cvs update: Updating files/3.4.2 cvs update: Updating files/3.4.3 cvs update: Updating files/3.4.4 cvs update: Updating files/4.0.2 cvs update: Updating files/4.1.0 cvs update: Updating files/4.3.2 cvs update: Updating files/awk cvs update: Updating files/stubs > Also include your ~/.cvsrc file. ls: cannot access /home/harald/.cvsrc: No such file or directory :-) (In reply to comment #4) > Repoman's code hasn't changed, and it just calls `cvs commit` (relies on cvs to > decide which files to send). repoman decides which files to send by scanning CVS/*; see the call to cvstree.getentries and findchanged. The list of files is kept, and eventually passed to cvs commit, and I suppose if you made no other changes, cvs commit by itself will figure out what to commit, but I also updated the ChangeLog, so repoman passed only that. Another problem with it. Bug #262692 c#7 (In reply to comment #6) > repoman decides which files to send by scanning CVS/*; see the call to > cvstree.getentries and findchanged. The list of files is kept, and eventually > passed to cvs commit, and I suppose if you made no other changes, cvs commit by > itself will figure out what to commit, but I also updated the ChangeLog, so > repoman passed only that. It seems like repoman makes unreliable assumptions about CVS/Entries, which causes it to generate an incorrect list of files to commit. So, it's not really a fault of cvs. We'll just have to find some other way for repoman to identify which files need to be committed. I'm wondering, is there any case where you want to skip a subdirectory? If the directory is empty, it doesn't matter either way. If the directory is not empty, you will want to report any files in it that have not been added to CVS, even if the directory itself hasn't been either. So I'm thinking you could simply check all subdirectories, and pay attention to CVS/Entries only for files. Created attachment 203733 [details, diff]
cvstree.py.patch
Guys, please test :)
Steps to reproduce: Ensure that your ~/.cvsrc will not be used. cvs -d :pserver:anonymous@anoncvs.gentoo.org:/var/cvsroot co gentoo-x86/app-accessibility/SphinxTrain find gentoo-x86 -type f -name 'Entries' -exec grep '^D' {} ';' rm -rf gentoo-x86 cvs -d :pserver:anonymous@anoncvs.gentoo.org:/var/cvsroot co -P gentoo-x86/app-accessibility/SphinxTrain find gentoo-x86 -type f -name 'Entries' -exec grep '^D' {} ';' (In reply to comment #10) > Created an attachment (id=203733) [edit] > cvstree.py.patch Thanks, that's in svn r14222. This is fixed in 2.2_rc41. This is fixed in 2.1.7. |