Dave,

This operation is only needed when SUNWfirefox-apoc-adapter is removed.  
So I think it should be put in postremove.

Brian

Dave Lin wrote:
> Adding postinstall script in SUNWfirefox-apoc-adapter to touch 
> ".autoreg" as well,  in order to trigger the registration if users 
> want to install apoc adapter back.
> One thing I'm not sure that if we need to let postrun to execute the 
> logic that in postinstall and postremove?
>
> Dave.
> Dave Lin wrote:
>> Hi All,
>>
>> To fully fix this bug, we need to make change both in code file 
>> nsXPComInit.cpp(part 1) and spec file SUNWfirefox.spec(part 2).
>>
>> Here comes the patch for SUNWfirefox.spec. The patch works like this,
>> the file  ".autoreg" will be delivered in SUNWfirefox, 
>> SUNWfirefox-apoc-adapter's postremove script will touch .autoreg 
>> right after apoc removal,  then when Firefox starts up next time, it 
>> will detect this file is newer than "components/compreg.dat" and call 
>> the registration program to update component registration information.
>>
>> Dave.
>> Brian Lu wrote:
>>> Fix the bug CR 6521792: Firefox cannot start,after removing apoc 
>>> adapter,with user account setup when apoc adapter installed
>>> ------------------------------------------------------------------------ 
>>>
>>>
>>> --- mozilla/xpcom/build/nsXPComInit.cpp.old    2006-08-05 
>>> 01:50:52.000000000 +0800
>>> +++ mozilla/xpcom/build/nsXPComInit.cpp    2007-03-09 
>>> 11:05:45.166807000 +0800
>>> @@ -262,6 +262,7 @@
>>>  // compreg.dat file.  If the .autoreg file is newer, we autoregister.
>>>  static PRBool CheckUpdateFile()
>>>  {
>>> +    PRBool ret;
>>>      nsresult rv;
>>>      nsCOMPtr<nsIFile> file;
>>>      rv = 
>>> nsDirectoryService::gService->Get(NS_XPCOM_CURRENT_PROCESS_DIR, @@ 
>>> -297,8 +298,13 @@
>>>      PRInt64 compregModTime, autoregModTime;
>>>      compregFile->GetLastModifiedTime(&compregModTime);
>>>      file->GetLastModifiedTime(&autoregModTime);
>>> -
>>> -    return LL_CMP(autoregModTime, >, compregModTime);
>>> + +    ret = LL_CMP(autoregModTime, >, compregModTime);
>>> +    if (ret)
>>> +    {
>>> +      compregFile->Remove(PR_FALSE);
>>> +    }
>>> +    return ret;
>>>  }
>>>  
>>>  
>>> @@ -622,6 +628,7 @@
>>>          for (int i = 0; i < components_length; i++)
>>>              RegisterGenericFactory(registrar, &components[i]);
>>>      }
>>> +    CheckUpdateFile();
>>>      rv = 
>>> nsComponentManagerImpl::gComponentManager->ReadPersistentRegistry();
>>>  #ifdef DEBUG         if (NS_FAILED(rv)) {
>>> @@ -629,7 +636,7 @@
>>>      }
>>>  #endif
>>>  
>>> -    if ( NS_FAILED(rv) || CheckUpdateFile()) {
>>> +    if ( NS_FAILED(rv)) {
>>>          // if we find no persistent registry, we will try to 
>>> autoregister
>>>          // the default components directory.
>>>          
>>> nsComponentManagerImpl::gComponentManager->AutoRegister(nsnull);
>>>   
>>
>> ------------------------------------------------------------------------
>>
>> Index: SUNWfirefox.spec
>> ===================================================================
>> --- SUNWfirefox.spec    (revision 10869)
>> +++ SUNWfirefox.spec    (working copy)
>> @@ -122,6 +122,15 @@
>>  find firefox ! -type d | grep -v "libmozapoc.so" | \
>>    sed -e 's#{#\\{#g' -e 's#}#\\}#g' -e 's#^.*$#%{_libdir}/&#' \
>>      >  %{_builddir}/%name-%version/%{name}.list
>> +
>> +# deliver file .autoreg for triggerring Firefox auto-re-registration
>> +# right after apoc adapter removal(see bug CR#CR6521792)
>> +# The postremove script will touch .autoreg after 
>> SUNWfirefox-apoc-adapter
>> +# uninstallation, then Firefox will detect this change and 
>> re-register +# the components
>> +#
>> +touch $RPM_BUILD_ROOT%{_libdir}/firefox/.autoreg
>> +
>>  %endif
>>  
>>  rm -rf $RPM_BUILD_ROOT%{_mandir}
>> @@ -148,10 +157,16 @@
>>    echo '/usr/bin/update-desktop-database'
>>  ) | $BASEDIR/lib/postrun -b -u -c JDS
>>  
>> -#####################################
>> -##      Package Files Section      ##
>> -#####################################
>> +%if %with_apoc_adapter
>> +%postun apoc-adapter
>> +PKGCOND=/usr/bin/pkgcond
>> +test -x $PKGCOND || exit 0
>> +if $PKGCOND is_path_writable $BASEDIR/lib/firefox; then
>> +  touch $BASEDIR/lib/firefox/.autoreg
>> +fi
>> +%endif
>>  
>> +
>>  %if %with_apoc_adapter
>>  %files -f SUNWfirefox.list
>>  %else
>> @@ -164,7 +179,7 @@
>>  %dir %attr (0755, root, bin) %{_libdir}
>>  
>>  %if %with_apoc_adapter
>> -#%{_libdir}/firefox
>> +%ghost %{_libdir}/firefox/.autoreg
>>  %else
>>  %{_libdir}/firefox
>>  %endif
>>   
>


Reply via email to