my mistake... I had some local weirdness. we've actually fixed a few
dozen tests with the change below. new numbers:
1015 tests PASSED
24 tests SKIPPED
24 tests XFAILED
84 tests FAILED
2 tests XPASSED
On Wed, Mar 4, 2009 at 16:05, Greg Stein <gstein_at_gmail.com> wrote:
> Oop. There are a number of regressions with this change, including in
> basic_tests. I'll get 'em fixed up shortly.
>
> Three steps forward... two steps back...
>
> On Wed, Mar 4, 2009 at 15:28, Greg Stein <gstein_at_gmail.com> wrote:
>> Author: gstein
>> Date: Wed Mar  4 06:28:05 2009
>> New Revision: 36307
>>
>> Log:
>> Refine the SCHEDULE field of returned entries, and make sure that DELETED
>> nodes are recorded properly.
>>
>> * subversion/libsvn_wc/entries.c:
>> Â (read_entries): for added nodes, it might be a simple add (rather than
>> Â Â replace) when there isn't a node in the current BASE tree (ie. the
>> Â Â database records it as "not present at this revision"). if we're
>> Â Â attempting to reading all the entries for a directory, and that
>> Â Â directory is obstructed/missing, then the dir itself should be listed
>> Â Â as schedule "normal" (the real state is in the parent). lastly, any
>> Â Â entry marked DELETED should be in the "normal" state since we aren't
>> Â Â actually going to try and delete anything.
>> Â (write_entry): a node that is marked DELETED should get a row in the
>> Â Â BASE_NODE table to record its not-present status.
>>
>> Modified:
>> Â trunk/subversion/libsvn_wc/entries.c
>>
>> Modified: trunk/subversion/libsvn_wc/entries.c
>> URL: http://svn.collab.net/viewvc/svn/trunk/subversion/libsvn_wc/entries.c?pathrev=36307&r1=36306&r2=36307
>> ==============================================================================
>> --- trunk/subversion/libsvn_wc/entries.c     Wed Mar  4 05:07:13 2009     (r36306)
>> +++ trunk/subversion/libsvn_wc/entries.c     Wed Mar  4 06:28:05 2009     (r36307)
>> @@ -1030,20 +1030,37 @@ read_entries(svn_wc_adm_access_t *adm_ac
>>
>> Â Â Â Â Â if (base_shadowed)
>> Â Â Â Â Â Â {
>> - Â Â Â Â Â Â Â entry->schedule = svn_wc_schedule_replace;
>> + Â Â Â Â Â Â Â svn_wc__db_status_t base_status;
>>
>> Â Â Â Â Â Â Â /* ### mystery: make the rev same as BASE. */
>> - Â Â Â Â Â Â Â SVN_ERR(svn_wc__db_base_get_info(NULL, NULL,
>> + Â Â Â Â Â Â Â SVN_ERR(svn_wc__db_base_get_info(&base_status, NULL,
>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â &entry->revision,
>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â NULL, NULL, NULL,
>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â NULL, NULL, NULL,
>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â NULL, NULL, NULL, NULL,
>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â db, entry_abspath,
>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â iterpool, iterpool));
>> +
>> + Â Â Â Â Â Â Â if (base_status == svn_wc__db_status_not_present)
>> + Â Â Â Â Â Â Â Â {
>> + Â Â Â Â Â Â Â Â Â /* ### the underlying node is DELETED in this revision. Â */
>> + Â Â Â Â Â Â Â Â Â entry->deleted = TRUE;
>> +
>> + Â Â Â Â Â Â Â Â Â /* This is an add since there isn't a node to replace. Â */
>> + Â Â Â Â Â Â Â Â Â entry->schedule = svn_wc_schedule_add;
>> + Â Â Â Â Â Â Â Â }
>> + Â Â Â Â Â Â Â else
>> + Â Â Â Â Â Â Â Â entry->schedule = svn_wc_schedule_replace;
>> Â Â Â Â Â Â }
>> Â Â Â Â Â else
>> Â Â Â Â Â Â {
>> - Â Â Â Â Â Â Â entry->schedule = svn_wc_schedule_add;
>> + Â Â Â Â Â Â Â /* ### when we're reading a directory that is not present,
>> + Â Â Â Â Â Â Â Â ### then it must be "normal" rather than "add". Â */
>> + Â Â Â Â Â Â Â if (*entry->name == '\0'
>> + Â Â Â Â Â Â Â Â Â && status == svn_wc__db_status_obstructed_add)
>> + Â Â Â Â Â Â Â Â entry->schedule = svn_wc_schedule_normal;
>> + Â Â Â Â Â Â Â else
>> + Â Â Â Â Â Â Â Â entry->schedule = svn_wc_schedule_add;
>>
>> Â Â Â Â Â Â Â /* ### if this looks like a plain old add, then rev=0. Â */
>> Â Â Â Â Â Â Â if (!SVN_IS_VALID_REVNUM(entry->copyfrom_rev)
>> @@ -1087,7 +1104,10 @@ read_entries(svn_wc_adm_access_t *adm_ac
>> Â Â Â Â }
>> Â Â Â else if (status == svn_wc__db_status_not_present)
>> Â Â Â Â {
>> - Â Â Â Â Â entry->schedule = svn_wc_schedule_delete;
>> + Â Â Â Â Â /* ### buh. 'deleted' nodes are actually supposed to be
>> + Â Â Â Â Â Â ### schedule "normal" since we aren't going to actually *do*
>> + Â Â Â Â Â Â ### anything to this node at commit time. Â */
>> + Â Â Â Â Â entry->schedule = svn_wc_schedule_normal;
>> Â Â Â Â Â entry->deleted = TRUE;
>> Â Â Â Â }
>> Â Â Â else if (status == svn_wc__db_status_obstructed)
>> @@ -1572,6 +1592,13 @@ write_entry(svn_sqlite__db_t *wc_db,
>> Â Â Â Â break;
>> Â Â }
>>
>> + Â /* Something deleted in this revision means there should always be a
>> + Â Â BASE node to indicate the not-present node. Â */
>> + Â if (entry->deleted)
>> + Â Â {
>> + Â Â Â base_node = MAYBE_ALLOC(base_node, scratch_pool);
>> + Â Â }
>> +
>> Â if (entry->copied)
>> Â Â {
>> Â Â Â /* Make sure we get a WORKING_NODE inserted. The copyfrom information
>>
>> ------------------------------------------------------
>> http://subversion.tigris.org/ds/viewMessage.do?dsForumId=495&dsMessageId=1266997
>>
>
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=1267449
Received on 2009-03-04 17:13:45 CET