I think I have a solution for the move to svn. It seems quite straight forward.
First, we have the concept of a repository. For the ports tree, all the commits will go under ports/. This is exactly like svn. However, I need to munge the incoming filenames.
For example, take this test svn commit I did:
Log: Take maintainership Modified: head/databases/mantis/Makefile Modified: head/databases/mantis/Makefile
For cvs, this pathname would be:
ports/databases/mantis/Makefile
Thus, the solution I propose is to change head/ to ports/, for FreeBSD port commits. Here is a function which returns the path prefix for a given commit.
sub GetOS_RepoPrefix {
#
# Scan the message looking for a List Id. Convert that to a repo prefix
# which will be prefixed to each filename in this commit.
#
my ($message) = @_;
my $myRepoPrefix = '';
my $myListId = FreshPorts::ProcessMail::myGetList_Id($message);
my %KnownRepos = (
"SVN commit messages for the entire src tree" => "src",
"SVN commit messages for the entire doc trees" => "doc",
"FreeBSD ports head commit mailing list" => "ports"
);
while (my ($ListId, $repo) = each %KnownRepos)
{
if ($myListId =~ /$ListId/i)
{
$myRepoPrefix = $repo;
last;
}
}
return $myRepoPrefix;
}
Elsewhere in this same script, the pathnames are assembled:
- push @files, 'FILE', [ { Action => $action, Revision => $revision, Path => $path } ];
+ push @files, 'FILE', [ { Action => $action, Revision => $revision, Path => $RepoPrefix . '/' . $path } ];
The keen observer may wonder how head/ is removed? That occurs in another place, for historical reasons.
+ # this removes head/, stable/ or vendor/ from the path + # we may need to revist this if ports start commiting on non-head $path =~ s/^\s+(head\/|stable\/\d+\/|vendor\/)//;
Why remove head? Because it didn’t fit into what we were doing back in Aug of 2011 when this svn script was first written.
I also made a change to the XML. It now contains the repo name, or rather, prefix.
],
'OS', [ {
- Id => &GetOS_Id,
- Branch => &GetOS_Branch($message) }
+ Id => &GetOS_Id($message),
+ Branch => &GetOS_Branch($message),
+ Repo => $RepoPrefix }
],
Here are two example XML message so you can compare a real cvs commit with one of my test svn commits:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE UPDATES PUBLIC "-//FreshPorts//DTD FreshPorts 2.0//EN" "http://www.freshports.org/docs/fp-updates.dtd">
<UPDATES Version="1.3.2.1">
<UPDATE>
<DATE Year="2012" Month="7" Day="10"></DATE>
<TIME Timezone="UTC" Hour="3" Second="48" Minute="12"></TIME>
<OS Id="FreeBSD" Repo="ports" Branch="HEAD"></OS>
<LOG>Chnage my email</LOG>
<PEOPLE>
<UPDATER Handle="dvl"></UPDATER>
</PEOPLE>
<MESSAGE EncodingLosses="false" Subject="svn commit: r297415 - head/databases/mantis" Id="201207100312.q6A3CmxK085207@svn.chruetertee.ch">
<DATE Year="2012" Month="7" Day="10"></DATE>
<TIME Timezone="UTC" Hour="3" Second="48" Minute="12"></TIME>
<REPOSITORY>src</REPOSITORY>
<TO Email="svn-ports@svn.chruetertee.ch"></TO>
</MESSAGE>
<FILES>
<FILE Revision="297415" Action="Modify" Path="ports/databases/mantis/Makefile"></FILE>
</FILES>
</UPDATE>
</UPDATES>
And a cvs commit:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE UPDATES PUBLIC "-//FreshPorts//DTD FreshPorts 2.0//EN" "http://www.freshports.org/docs/fp-updates.dtd">
<UPDATES Version="1.3.2.1">
<UPDATE>
<DATE Year="2012" Month="7" Day="11"></DATE>
<TIME Timezone="UTC" Hour="1" Second="35" Minute="17"></TIME>
<OS Id="FreeBSD" Branch="HEAD"></OS>
<LOG>- Construct CPP and CXXCPP from the existing variables.
- Pass CXXCPP as an environment variable for the configure script as it is
only useful there at the moment. Actually, ports infrastructure ignores it.</LOG>
<PEOPLE>
<UPDATER Handle="jkim"></UPDATER>
</PEOPLE>
<MESSAGE EncodingLosses="false" Subject="cvs commit: ports/editors/libreoffice Makefile" Id="201207110117.q6B1HZcH072699@repoman.freebsd.org">
<DATE Year="2012" Month="7" Day="11"></DATE>
<TIME Timezone="UTC" Hour="1" Second="35" Minute="17"></TIME>
<REPOSITORY>ports</REPOSITORY>
<TO Email="ports-committers@FreeBSD.org"></TO>
<TO Email="cvs-ports@FreeBSD.org"></TO>
<TO Email="cvs-all@FreeBSD.org"></TO>
</MESSAGE>
<FILES>
<FILE Revision="1.55" Action="Modify" Path="ports/editors/libreoffice/Makefile" Changes="+5 -4"></FILE>
</FILES>
</UPDATE>
</UPDATES>
I think I’m ready now. :)











