[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

RE: [Subclipse-dev] Bug 279 fix proposal

From: Martin Letenay <mle_at_whitestein.com>
Date: 2005-06-11 21:25:35 CEST

> > Once you have done a Synch, people have reported that when
> new files
> > are added to the remote repository, they will not appear.
> >
> > Those are the two main ones I know of.
>
> I've also noticed that sync view doesn't show outgoing
> changes for properties and the only way to see these changes
> is to run commit from Team popup menu.
>
> regards,
> Eugene
>

Well,

It seems I've found and killed that nasty bug(s).
I believe that both the "phantom" resources and syncView refresh problems
were caused by not properly storing and maintaining the syncInfo variable in
resource's ResourceInfo objects.

So what I did:
- major change is in the SVNWorkspaceSubscriber

The SessionResourceVariantByteStore was replaced by
PersistantResourceVariantByteStore.
The later one is persistent across eclipse sessions and more important it
updates the syncInfo stuff on change.

There is new ensureBaseStatusInfo() method there which on "access to base
copy info" checks whether the syncInfo stuff is properly set.
It's called on the resource tree during the refresh (i.e. synchronize with
repository action ) and just for sure also on each call to getSyncInfo().

There are also few isSupervised() checks added so non-shared files (e.g.
.class files) are not stored in remoteSyncStateStore.

The StatusInfo inner class has a new constructor which takes two
SVNStatusKinds - one for text and one for properties.
They are rather primitively "merged", so during synchronization also
resources with no text but some SVN-properties changes are flaged as
outgoing.

- minor fix to SyncFileChangeListener

The container.members() call is replaced with container.members(true) so
also phantom resources are collected, thus added and deleted files could
work properly.

- minor change to StatusCommand

Inspired by and copied from GetStatusCommand code, the refresh of local
statuses is called by
SVNProviderPlugin.getPlugin().getStatusCacheManager().setStatuses(convert(st
atuses));

- minor fix in SVNStatusSyncInfo

added as first check for additions :: if (isAddition(repositoryKind))
return SyncInfo.INCOMING | SyncInfo.ADDITION;

The problem with non showed incoming additions in sync view were caused by
the fact that incoming sync info has local kind as UNVERSIONED and remore as
ADDED.
However the old code has a first check localKind ==
SVNStatusKind.UNVERSIONED) return SyncInfo.IN_SYNC,
so addition were considered as IN_SYNC ...
I'm not sure wheter that line should be there at all (or not at the
beginnig), so I just put the check for addition before it ...

So I believe that now:
- deleting versioned resource properly triggers parent resources dirty
decorators
- deleted resources are removed from syncView after commit
- resources added to repository are displayed as incoming in syncView
- when a svn properties are changed on a file, it is displayed as outgoing
change in syncView

Regards,
Martin

Received on Sun Jun 12 05:25:35 2005

This is an archived mail posted to the Subclipse Dev mailing list.