[SmartcardServices-Dev] Proposal for patching and maintaining the main source repository

William Siegrist wsiegrist at apple.com
Tue Jul 21 13:15:03 PDT 2009


On Jul 21, 2009, at 10:19 AM, Ludovic Rousseau wrote:

> 2009/7/21 William Siegrist <wsiegrist at apple.com>:
>> On Jul 21, 2009, at 8:38 AM, Ludovic Rousseau wrote:
>>> 2009/7/10 William Siegrist <wsiegrist at apple.com>:
>>>
>>
>> Yes, I can create the initial plist. The "scs" was used in this  
>> example
>> since the Mac OS Forge project is "Smartcard Services", but the  
>> name of the
>> plist does not matter. Though, it should not match one of the built- 
>> in
>> plists which are named after build numbers (9G55.plist, 9J61.plist,  
>> etc).
>>
>> The plist can contain all 3 projects, or each sub project can have  
>> their
>> own. I think having 1 plist is easier, but I'm not the one doing the
>> development.
>
> I vote for 3 different plist files.
> I plan to propose (independent) upgrades for SmartCardServices and
> SmartcardCCID. And I would like to keep the projects independent.
>
> Maybe a global plist can "include" the 3 other ones?
>

Sure


>>>> Note that this method does not use the source in the subversion  
>>>> repo.
>>>> What could happen periodically is all of the patches get applied  
>>>> to the
>>>> subversion repo and a new tarball is generated. Then the plist is  
>>>> modified
>>>> to point to the new tarball and no patches.
>>>
>>> Working directly with subversion would be great. But it looks like  
>>> it
>>> is difficult :-(
>>
>>
>> Thats the conclusion John and I came to as well.  But after some  
>> thought, I
>> believe we could use an svn working copy inside the BuildRoot. So  
>> instead of
>> an initial "darwinbuild SmartCardServices" to download the tarball  
>> and
>> patches, you do a "svn co ..." then the usual "darwinbuild - 
>> nosource ...".
>> I'll have to test my idea first, but if it works, I'll post a new  
>> example
>> workflow that would allow directly committing to svn.  This might  
>> even
>> eliminate the need for a custom plist, as long as you don't need to  
>> modify
>> what dependencies are in the standard 9J61.plist.
>
> That would be great.
>


Using svn directly works, but it is still a little cumbersome.  
Darwinbuild does not really support this sort of usage, but this is  
what it would look like for SmartCardServices and Tokend:

$ mkdir ~/scsleo && cd ~/scsleo
$ sudo darwinbuild -init 9J61
... watch darwinbuild fetch plists you need ...
$ sudo darwinbuild SmartCardServices
... watch it load all the roots you need ...
... watch it generate the build scripts and build the stock 9J61  
project ...

# replace 9J61 SCS with checkout from svn
$ cd BuildRoot/SourceCache/SmartCardServices/
$ rm -rf SmartCardServices-34733
$ svn co http://svn.macosforge.org/repository/smartcardservices/trunk/SmartCardServices 
  SmartCardServices-34733
$ cd ../../..

... edit files inside your working copy as needed ...

# try to build your changes
# using -nosource is important as it tells darwinbuild to not   
overwrite your changes to the source cache
$ darwinbuild -nosource SmartCardServices
... watch it build your modified source ...
... edit more files, repeat as necessary ...

# commit or create your patchfile
$ cd BuildRoot/SourceCache/SmartCardServices/SmartCardServices-34733/
$ svn ci . -m 'commit message here'
... or ...
$ svn diff > ~/my_scs_patch.diff


Non-committers would submit patches in tickets and someone would apply  
them when approved. Committers just commit from their working copy.  
You can keep reusing this environment, editing files, updating the  
working copy as others commit changes, etc. So all the steps up to the  
"darwinbuild -nosource" line are a one time setup.

The SmartCardCCID project is not a project in the built-in darwinbuild  
plists. You'll need a plist for people to download and use with  
"darwinbuild -init", and a tarball of the source on the server  
somewhere.  I can bootstrap this for you.

How does this look?

-Bill



More information about the SmartcardServices-Dev mailing list