NAME
VCS::CMSynergy::Changes - List of changes to VCS::CMSynergy
CHANGES
Changes in Version 1.16
BIG FAT WARNING: VERSION 1.5 INTRODUCED AN INCOMPATIBLE CHANGE
w.r.t. to VCS::CMSynergy class methods (e.g. ps() or databases()), see below.
INCOMPATIBLE CHANGE: The hash returned by finduse() and the "finduse"
keyword for query_arrayref()/query_hashref() no longer has keys of the
form "project-version". The keys are now the full objectnames of the
projects (regardless which form is returned by CM Synergy). This was
necessary sincd CM Synergy 6.3 allows for projects with instance
other than '1'.
Implemented traverse_project() (modelled on File::Find).
Hacked up script examples/grep_attr: greps attribute values
for a list of objects (optionally determined by a query).
Documented the fact that query_arrayref() and query_hashref() will
rewrite values for keyword "objectname" that CM Synergy returns
in deprecated fullname form.
Tested on CM Synergy 6.3 SP1 (some tests needed adjustments).
Changes in Version 1.15 (not released)
INCOMPATIBLE CHANGE: VCS::CMSynergy class methods are now
implemented differently and should not expect to use the value
of $ENV{CCM_HOME} current at the time the method is called.
Code that doesn't manipulate $ENV{CCM_HOME} is unaffected,
but the following idiom (often seen in administrator scripts
in an environment with several CM Synergy installations)
WILL NOT WORK ANYMORE:
# run "ccm ps" on all our installations
use VCS::CMSynergy;
...
foreach my $ccm_home (qw(/usr/local/ccm51 /usr/local/ccm62))
{
local $ENV{CCM_HOME} = $ccm_home;
my $ps = VCS::CMSynergy->ps(...);
...
}
That's because the very first invocation of any VCS::CMSynergy
(or VCS::CMSynergy::Client) class method "captures" the value
of $ENV{CCM_HOME} at that time. This value is then used for all
class method invocations. Hence in the above example,
you will run "ccm ps" twice with CCM_HOME=/usr/local/ccm51.
The correct way to rewrite the example is to make the setting of
CCM_HOME explicit by introducing a VCS::CMSynergy::Client object:
use VCS::CMSynergy;
use VCS::CMSynergy::Client;
...
foreach my $ccm_home (qw(/usr/local/ccm51 /usr/local/ccm62))
{
my $installation = VCS::CMSynergy::Client->new(CCM_HOME => $ccm_home);
my $ps = $installation->ps(...);
...
}
Split out VCS::CMSynergy class methods (e.g. ps()) into their own class,
VCS::CMSynergy::Client. Basically, a V::C::Client object encapsulates
a particular setting of CCM_HOME. Invoking these methods as class
methods (either on VCS::CMSynergy or VCS::CMSynergy::Client) still works,
but they are silently redirected to a "default" V::C::Client object.
This object is instantiated the first time it is needed and gets the
value of CCM_HOME valid in %ENV at that time. If you want to call
V::C::Client methods with different values of CCM_HOME in the
same program, you must explicitly instantiate different V::C::Client objects
and call the methods via these objects. In fact, the motivation for
this surgery were too many administrative programs that wanted to operate
on several installations in one invocation and had to resort to ugly
switcheroo of $ENV{CCM_HOME} to do that.
Optional usage of Memoize has been dropped.
Documented former private methods ccm_with_option()
and ccm_with_text_editor().
Changes in Version 1.14
Implemented tied hash interface for VCS::CMSynergy::Object.
Now you can get/set attributes by treating an V::C::Object like a hash.
Since this requires every V::C::Object to hold a reference to the sesssion,
this is only available if Scalar::Util is detected at runtime (so we
can weaken the referemce).
Changes in Version 1.13 (not released)
Implemented get_releases()/set_releases() for manipulating the release table.
Implement property().
Fixed 'ye olde text_editor trick on Windows (checked on NT 4.0 and XP):
CM Synergy seems unable to execute "shell" builtins (like "copy"),
use "xcopy" instead.
Made VCS::CMSynergy work on cygwin (even UseCoprocess works).
This requires Filesys::CygwinPaths to translate Cygwin path names
(e.g. as returned by File::Temp::tempfile()) to Windows path names.
Changed record/field separators (used internally by query/finduse/history)
from \cD/\cG to \cA/\cD, but someone will probably succeed in
entering these into some attribute. Anyway, avoid \x1C-\x1E as
they are used by Change Synergy in some attribute of "problem".
Added a hint on the usage of new(ui_database_dir => ...).
Merge pod entries for query_arrayref/query_hashref and
history_arrayref/history_hashref.
Fixed brown paper bag errors in set_attribute (wrong usage check)
and set_error (handling of HandleError).
Changes in Version 1.12
INCOMPATIBLE CHANGE: attribute() has been replaced by two methods
get_attribute() and set_attribute().
attributes() has been renamed to list_attributes().
Move VCS::CMSynergy hash keys CCM_HOME, CCM_ADDR and CCM_INI_FILE
into sub hash env. Change ccmexec to pass it a hash ref with keys/values
to temporarily add to %ENV instead of passing CCM_HOME.
Factor ccm() into _ccm() (does all the work except error handling) and
make ccm() a simple wrapper for it. Get rid of IgnoreError and
use _ccm for all "internal" calls.
Document "HandleError" and set_errror().
Pod: change all method "=item"s to "=head2"; the man page looks slightly
worse, but the HTML rendering is much better.
CMSynergy/users.pl: renamed to CMSynergy/update_users.pm.
Implemented create_attribute(), delete_attribute(), and copy_attribute().
Changes in Version 1.10
Document types of options for new().
Document option `KeepSession' for new().
Mention correct way to explicity stop a session.
Implement ccm_addr().
Make database() lazy.
Changes in Version 1.09 (not released)
Make it work for ancient Continuus 4.5 (fixes #1681):
- `ccm ps -rfc_address ADDR' doesn't find the process if host part of ADDR
is given as name (instead of an IP address); esp. this breaks
`ccm ps -rfc_address $ccm->{CCM_ADDR}' - used in new()
- different error messages from `ccm finduse' if object is not in use
- adjust test cases
Correctly handle (Raise|Print|Handle)Error when ps() in new() fails.
Add 'remote_client => 1' to options for new() (causes `-rc' for `ccm start').
Changes in Version 1.08
INCOMPATIBLE CHANGE: The pseudo keyword "finduse" in query_arrayref()
and query_hashref() does not return a list of project references
any more. It now returns a hash which maps proj_vers to relative_path.
Similarly, the rows returned by finduse() have changed from
[ $description, @project_references ]
to
[ $description, \%usage_map ].
Converted findpath() to use new finduse(), adjusted t/04finduse.t.
Convert tests to use Test::More.
Makefile.PL: don't require Memoize anymore, just recommend it.
Windows: will sleep(2) _after_ "ccm stop" and _before_ unlinking
files_to_unlink (because they may still be "busy" - probably "ccm stop"
returns _before_ CM Synergy really has ceased operation).
Fix problem with set_error() that's probably a perl bug
(at least for 5.6.1, fixed in 5.8.1, cf #9998, #9739 on rt.perl.org):
sub foo
{
my @x = (2, 1, 0); # last elem must be false
return @x if wantarray and @x;
print "OOPS\n";
}
my @foo = foo;
This will print "OOPS". Somehow wantarray seems to force list context
onto the right-hand side of "and" - @x will thus evaluate to its
last element.
Changes in Version 1.07
INCOMPATIBLE CHANGE: The 3-arg form of attribute() does not return
the old value any more.
Document 3-arg form of attribute().
When setting attributes, cope with arbitrary types by looking
up the super_type recursively until one of the well known types
(for which we "just know" whether they need the "text_editor"
trick )is found.
Kludge for annoying `Security violation...' warning on Windows
(thanks to Peter Kreuz for the explanation what's goin' on).
Rewritten output parsing for history_*().
Fix typo in types().
Add error() and ccm_command() calss/instance methods, prefer
them in docs over explicit $ccm->{error} or $VCS::CMSynergy::error.
Add "ui_database_dir" option to new().
Version 1.05
The Great Renaming: s/CMSyngery/VCS::CMSynergy/g.
First version uploaded to CPAN.
Version 1.04
Split out CMSynergy::Users.pm.
Fix bug with multi-line valued attributes in query_* functions.
Rewritten output parsing for query_*() and finduse().
Make "ccm->set('foo', undef) " execute "ccm unset foo".
Fix bug reported by Jürgen Schorer: CCM_HOME not passed down to "ccm start".
Rewritten test cases.
Make tests work under NT and Cygwin.
Split out (and currently don't distribute) CMSynergy::Traversal.pm.
Version 1.02
Fill $VERSION from CM Synergy version.
Add LICENSE in preparation for CPAN upload.
Version 1.01
Fix exit code of ccm() when using coprocess.
Version 1.00
"ccm ps" can't be called interactively.
Make set_error callable as class method.
Convenience function: CMObject::proj_vers.
Version 0.98
Downgrade required Perl version to 5.6.0 (untested).
Use Memoize.pm if available, otherwise memoization is a no-op.
Version 0.97
Fix problems when outer SIGCHLD handler is present.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 239:
Non-ASCII character seen before =encoding in 'Jürgen'. Assuming CP1252