basic/source/app/app.cxx | 7 -- basic/source/uno/namecont.cxx | 115 ++++++++++++++++------------------ sal/inc/osl/diagnose.h | 20 ----- sal/osl/all/formatstring.cxx | 58 ----------------- sal/osl/all/makefile.mk | 2 sal/util/sal.map | 5 - sfx2/source/appl/module.cxx | 12 ++- vcl/unx/generic/printer/ppdparser.cxx | 56 +++------------- 8 files changed, 74 insertions(+), 201 deletions(-)
New commits: commit 256f1925826436ed8902848369a5744b4d2f22b8 Author: Tor Lillqvist <tlillqv...@suse.com> Date: Sat Oct 8 15:07:06 2011 +0300 Revert "Introduced OSL_FORMAT, adpated some places to it." Breaks the MSVC build for me: 'osl_detail_formatString' : C linkage function cannot return C++ class 'rtl::OString'. This reverts commit 6b900b8bede24c8710d62e9e7cbff613a0b12f9f. diff --git a/basic/source/app/app.cxx b/basic/source/app/app.cxx index 9eb83c8..3f714dd 100644 --- a/basic/source/app/app.cxx +++ b/basic/source/app/app.cxx @@ -1848,12 +1848,7 @@ String BasicFrame::GenRealString( const String &aResString ) } else { - OSL_FAIL( - OSL_FORMAT( - "Unknown replacement in String: %s", - rtl::OUStringToOString( - aResult.Copy(nStart, nEnd - nStart), - RTL_TEXTENCODING_UTF8).getStr())); + OSL_FAIL( CByteString("Unknown replacement in String: ").Append( ByteString( aResult.Copy(nStart,nEnd-nStart), RTL_TEXTENCODING_UTF8 ) ).GetBuffer() ); nStartPos = nStartPos + StartKenn.Len(); } } diff --git a/basic/source/uno/namecont.cxx b/basic/source/uno/namecont.cxx index c0733a3..d14ca98 100644 --- a/basic/source/uno/namecont.cxx +++ b/basic/source/uno/namecont.cxx @@ -384,21 +384,21 @@ SfxLibraryContainer::SfxLibraryContainer( void ) mxMSF = comphelper::getProcessServiceFactory(); if( !mxMSF.is() ) { - OSL_FAIL( "couldn't get ProcessServiceFactory" ); + OSL_FAIL( "### couldn't get ProcessServiceFactory\n" ); } mxSFI = Reference< XSimpleFileAccess >( mxMSF->createInstance ( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.ucb.SimpleFileAccess")) ), UNO_QUERY ); if( !mxSFI.is() ) { - OSL_FAIL( "couldn't create SimpleFileAccess component" ); + OSL_FAIL( "### couldn't create SimpleFileAccess component\n" ); } mxStringSubstitution = Reference< XStringSubstitution >( mxMSF->createInstance ( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.util.PathSubstitution")) ), UNO_QUERY ); if( !mxStringSubstitution.is() ) { - OSL_FAIL( "couldn't create PathSubstitution component" ); + OSL_FAIL( "### couldn't create PathSubstitution component\n" ); } } @@ -673,7 +673,7 @@ sal_Bool SfxLibraryContainer::init_Impl( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Parser") ) ), UNO_QUERY ); if( !xParser.is() ) { - OSL_FAIL( "couldn't create sax parser component" ); + OSL_FAIL( "### couldn't create sax parser component\n" ); return sal_False; } @@ -824,13 +824,13 @@ sal_Bool SfxLibraryContainer::init_Impl( catch ( xml::sax::SAXException& e ) { (void) e; // avoid warning - OSL_FAIL( OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); + OSL_FAIL( OUStringToOString( e.Message, RTL_TEXTENCODING_ASCII_US ).getStr() ); return sal_False; } catch ( io::IOException& e ) { (void) e; // avoid warning - OSL_FAIL( OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); + OSL_FAIL( OUStringToOString( e.Message, RTL_TEXTENCODING_ASCII_US ).getStr() ); return sal_False; } @@ -918,16 +918,12 @@ sal_Bool SfxLibraryContainer::init_Impl( { #if OSL_DEBUG_LEVEL > 0 Any aError( ::cppu::getCaughtException() ); - OSL_FAIL( - OSL_FORMAT( - ("couldn't open sub storage for library" - " \"%s\". Exception: %s"), - (rtl::OUStringToOString( - rLib.aName, RTL_TEXTENCODING_UTF8). - getStr()), - rtl::OUStringToOString( - comphelper::anyToString(aError), - RTL_TEXTENCODING_UTF8).getStr())); + ::rtl::OStringBuffer aMessage; + aMessage.append( "couldn't open sub storage for library '" ); + aMessage.append( ::rtl::OUStringToOString( rLib.aName, osl_getThreadTextEncoding() ) ); + aMessage.append( "'.\n\nException:" ); + aMessage.append( ::rtl::OUStringToOString( ::comphelper::anyToString( aError ), osl_getThreadTextEncoding() ) ); + OSL_FAIL( aMessage.makeStringAndClear().getStr() ); #endif } } @@ -940,7 +936,7 @@ sal_Bool SfxLibraryContainer::init_Impl( if( bLoaded && aLibName != rLib.aName ) { OSL_FAIL( "Different library names in library" - " container and library info files!" ); + " container and library info files!\n" ); } if( GbMigrationSuppressErrors && !bLoaded ) removeLibrary( aLibName ); @@ -1414,11 +1410,13 @@ void SfxLibraryContainer::implStoreLibrary( SfxLibrary* pLib, if( !isLibraryElementValid( pLib->getByName( aElementName ) ) ) { - OSL_FAIL( - OSL_FORMAT( - "invalid library element \"%s\"", - rtl::OUStringToOString( - aElementName, RTL_TEXTENCODING_UTF8).getStr())); + #if OSL_DEBUG_LEVEL > 0 + ::rtl::OStringBuffer aMessage; + aMessage.append( "invalid library element '" ); + aMessage.append( ::rtl::OUStringToOString( aElementName, osl_getThreadTextEncoding() ) ); + aMessage.append( "'." ); + OSL_FAIL( aMessage.makeStringAndClear().getStr() ); + #endif continue; } try { @@ -1449,7 +1447,7 @@ void SfxLibraryContainer::implStoreLibrary( SfxLibrary* pLib, } catch(const uno::Exception& ) { - OSL_FAIL( "Problem during storing of library!" ); + OSL_FAIL( "Problem during storing of library!\n" ); // TODO: error handling? } } @@ -1496,11 +1494,13 @@ void SfxLibraryContainer::implStoreLibrary( SfxLibrary* pLib, if( !isLibraryElementValid( pLib->getByName( aElementName ) ) ) { - OSL_FAIL( - OSL_FORMAT( - "invalid library element \"%s\"", - rtl::OUStringToOString( - aElementName, RTL_TEXTENCODING_UTF8).getStr())); + #if OSL_DEBUG_LEVEL > 0 + ::rtl::OStringBuffer aMessage; + aMessage.append( "invalid library element '" ); + aMessage.append( ::rtl::OUStringToOString( aElementName, osl_getThreadTextEncoding() ) ); + aMessage.append( "'." ); + OSL_FAIL( aMessage.makeStringAndClear().getStr() ); + #endif continue; } @@ -1552,7 +1552,7 @@ void SfxLibraryContainer::implStoreLibraryIndexFile( SfxLibrary* pLib, OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Writer") ) ), UNO_QUERY ); if( !xHandler.is() ) { - OSL_FAIL( "couldn't create sax-writer component" ); + OSL_FAIL( "### couldn't create sax-writer component\n" ); return; } @@ -1588,7 +1588,7 @@ void SfxLibraryContainer::implStoreLibraryIndexFile( SfxLibrary* pLib, } catch(const uno::Exception& ) { - OSL_FAIL( "Problem during storing of library index file!" ); + OSL_FAIL( "Problem during storing of library index file!\n" ); // TODO: error handling? } } @@ -1637,7 +1637,7 @@ void SfxLibraryContainer::implStoreLibraryIndexFile( SfxLibrary* pLib, } if( !xOut.is() ) { - OSL_FAIL( "couldn't open output stream" ); + OSL_FAIL( "### couldn't open output stream\n" ); return; } @@ -1655,7 +1655,7 @@ sal_Bool SfxLibraryContainer::implLoadLibraryIndexFile( SfxLibrary* pLib, OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Parser") ) ), UNO_QUERY ); if( !xParser.is() ) { - OSL_FAIL( "couldn't create sax parser component" ); + OSL_FAIL( "### couldn't create sax parser component\n" ); return sal_False; } @@ -1727,7 +1727,7 @@ sal_Bool SfxLibraryContainer::implLoadLibraryIndexFile( SfxLibrary* pLib, } catch(const Exception& ) { - OSL_FAIL( "Parsing error" ); + OSL_FAIL( "Parsing error\n" ); SfxErrorContext aEc( ERRCTX_SFX_LOADBASIC, aLibInfoPath ); sal_uIntPtr nErrorCode = ERRCODE_IO_GENERAL; ErrorHandler::HandleError( nErrorCode ); @@ -1915,15 +1915,12 @@ void SfxLibraryContainer::storeLibraries_Impl( const uno::Reference< embed::XSto { #if OSL_DEBUG_LEVEL > 0 Any aError( ::cppu::getCaughtException() ); - OSL_FAIL( - OSL_FORMAT( - ("couldn't create sub storage for library" - " \"%s\". Exception: %s"), - rtl::OUStringToOString( - rLib.aName, RTL_TEXTENCODING_UTF8).getStr(), - rtl::OUStringToOString( - comphelper::anyToString(aError), - RTL_TEXTENCODING_UTF8).getStr())); + ::rtl::OStringBuffer aMessage; + aMessage.append( "couldn't create sub storage for library '" ); + aMessage.append( ::rtl::OUStringToOString( rLib.aName, osl_getThreadTextEncoding() ) ); + aMessage.append( "'.\n\nException:" ); + aMessage.append( ::rtl::OUStringToOString( ::comphelper::anyToString( aError ), osl_getThreadTextEncoding() ) ); + OSL_FAIL( aMessage.makeStringAndClear().getStr() ); #endif return; } @@ -2028,7 +2025,7 @@ void SfxLibraryContainer::storeLibraries_Impl( const uno::Reference< embed::XSto OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Writer") ) ), UNO_QUERY ); if( !xHandler.is() ) { - OSL_FAIL( "couldn't create sax-writer component" ); + OSL_FAIL( "### couldn't create sax-writer component\n" ); return; } @@ -2088,7 +2085,7 @@ void SfxLibraryContainer::storeLibraries_Impl( const uno::Reference< embed::XSto } if( !xOut.is() ) { - OSL_FAIL( "couldn't open output stream" ); + OSL_FAIL( "### couldn't open output stream\n" ); return; } @@ -2110,7 +2107,7 @@ void SfxLibraryContainer::storeLibraries_Impl( const uno::Reference< embed::XSto } catch(const uno::Exception& ) { - OSL_FAIL( "Problem during storing of libraries!" ); + OSL_FAIL( "Problem during storing of libraries!\n" ); sal_uIntPtr nErrorCode = ERRCODE_IO_GENERAL; ErrorHandler::HandleError( nErrorCode ); } @@ -2339,15 +2336,12 @@ void SAL_CALL SfxLibraryContainer::loadLibrary( const OUString& Name ) { #if OSL_DEBUG_LEVEL > 0 Any aError( ::cppu::getCaughtException() ); - OSL_FAIL( - OSL_FORMAT( - ("couldn't open sub storage for library \"%s\"." - " Exception: %s"), - (rtl::OUStringToOString(Name, RTL_TEXTENCODING_UTF8). - getStr()), - rtl::OUStringToOString( - comphelper::anyToString(aError), - RTL_TEXTENCODING_UTF8).getStr())); + ::rtl::OStringBuffer aMessage; + aMessage.append( "couldn't open sub storage for library '" ); + aMessage.append( ::rtl::OUStringToOString( Name, osl_getThreadTextEncoding() ) ); + aMessage.append( "'.\n\nException:" ); + aMessage.append( ::rtl::OUStringToOString( ::comphelper::anyToString( aError ), osl_getThreadTextEncoding() ) ); + OSL_FAIL( aMessage.makeStringAndClear().getStr() ); #endif return; } @@ -2392,12 +2386,13 @@ void SAL_CALL SfxLibraryContainer::loadLibrary( const OUString& Name ) if ( !xInStream.is() ) { - OSL_FAIL( - OSL_FORMAT( - ("couldn't open library element stream - attempted" - " to open library \"%s\""), - rtl::OUStringToOString( - Name, RTL_TEXTENCODING_UTF8).getStr())); + #if OSL_DEBUG_LEVEL > 0 + ::rtl::OStringBuffer aMessage; + aMessage.append( "couldn't open library element stream - attempted to open library '" ); + aMessage.append( ::rtl::OUStringToOString( Name, osl_getThreadTextEncoding() ) ); + aMessage.append( "'." ); + OSL_FAIL( aMessage.makeStringAndClear().getStr() ); + #endif return; } } diff --git a/sal/inc/osl/diagnose.h b/sal/inc/osl/diagnose.h index 1e4dd13..ab5243f 100644 --- a/sal/inc/osl/diagnose.h +++ b/sal/inc/osl/diagnose.h @@ -192,26 +192,6 @@ pfunc_osl_printDetailedDebugMessage SAL_CALL osl_setDetailedDebugMessageFunc( pf #define OSL_THIS_FUNC "" #endif -#if defined __cplusplus - -namespace rtl { class OString; } - -/** @internal */ -extern "C" ::rtl::OString SAL_CALL osl_detail_formatString( - char const * format, ...) SAL_THROW_EXTERN_C(); - -/** A facility for printf-style messages in OSL_ENSURE, OSL_FAIL, etc. - - Use like: OSL_ENSURE(i == 5, OSL_FORMAT("i should be 5 but is %d", i)); -*/ -#define OSL_FORMAT(format, ...) \ - (::osl_detail_formatString(format, __VA_ARGS__).getStr()) - // it appears that all relevant compilers (esp. GCC 4.0 and MS VS 2008 - // Express) already support variadic macros in C++; see also - // <http://wiki.apache.org/stdcxx/C++0xCompilerSupport> - -#endif - #endif /* _OSL_DIAGNOSE_H_ */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/all/formatstring.cxx b/sal/osl/all/formatstring.cxx deleted file mode 100644 index 9741745..0000000 --- a/sal/osl/all/formatstring.cxx +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Version: MPL 1.1 / GPLv3+ / LGPLv3+ - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License or as specified alternatively below. You may obtain a copy of - * the License at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * Major Contributor(s): - * [ Copyright (C) 2011 Stephan Bergmann, Red Hat Inc. <sberg...@redhat.com> - * (initial developer) ] - * - * All Rights Reserved. - * - * For minor contributions see the git repository. - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 3 or later (the "GPLv3+"), or - * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), - * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable - * instead of those above. - */ - -#include "precompiled_sal.hxx" -#include "sal/config.h" - -#include <cstdarg> -#include <cstring> -#include <stdio.h> // vsnprintf not in C++03 <cstdio>, only C99 <stdio.h> - -#include "osl/diagnose.h" -#include "rtl/string.hxx" - -rtl::OString osl_detail_formatString(char const * format, ...) - SAL_THROW_EXTERN_C() -{ - // Avoid the use of other sal code as much as possible, so that this code - // can be called from other sal code without causing endless recursion: - char buf[1024]; - int n1 = sizeof buf - RTL_CONSTASCII_LENGTH("..."); - std::va_list args; - va_start(args, format); - int n2 = vsnprintf(buf, n1, format, args); - va_end(args); - if (n2 < 0) { - std::strcpy(buf, "???"); - n2 = RTL_CONSTASCII_LENGTH("???"); - } else if (n2 >= n1) { - std::strcpy(buf + n1 - 1, "..."); - n2 = sizeof buf - 1; - } - return rtl::OString(buf, n2); -} diff --git a/sal/osl/all/makefile.mk b/sal/osl/all/makefile.mk index d9db5b7..fa92841 100644 --- a/sal/osl/all/makefile.mk +++ b/sal/osl/all/makefile.mk @@ -50,7 +50,6 @@ CXXFLAGS+= $(LFS_CFLAGS) SLOFILES= \ $(SLO)$/utility.obj\ $(SLO)$/filepath.obj\ - $(SLO)$/formatstring.obj\ $(SLO)$/debugbase.obj\ $(SLO)$/loadmodulerelative.obj \ $(SLO)/printtrace.obj @@ -58,7 +57,6 @@ SLOFILES= \ OBJFILES= \ $(OBJ)$/utility.obj\ $(OBJ)$/filepath.obj\ - $(OBJ)$/formatstring.obj\ $(OBJ)$/debugbase.obj\ $(OBJ)$/loadmodulerelative.obj \ $(OBJ)/printtrace.obj diff --git a/sal/util/sal.map b/sal/util/sal.map index b1b8892..152b023 100755 --- a/sal/util/sal.map +++ b/sal/util/sal.map @@ -625,8 +625,3 @@ PRIVATE_1.1 { sal_detail_initialize; sal_detail_deinitialize; } PRIVATE_1.0; - -PRIVATE_1.2 { # LibreOffice 3.5 - global: - osl_detail_formatString; -} PRIVATE_1.1; diff --git a/sfx2/source/appl/module.cxx b/sfx2/source/appl/module.cxx index 6883e90..8fa50b3 100644 --- a/sfx2/source/appl/module.cxx +++ b/sfx2/source/appl/module.cxx @@ -391,11 +391,13 @@ FieldUnit SfxModule::GetModuleFieldUnit( ::com::sun::star::uno::Reference< ::com SfxPoolItem const * pItem = pModule->GetItem( SID_ATTR_METRIC ); if ( pItem == NULL ) { - OSL_FAIL( - OSL_FORMAT( - ("SfxModule::GetFieldUnit: no metric item in the module" - " implemented by '%s'!"), - typeid(*pModule).name())); +#if OSL_DEBUG_LEVEL > 0 + ::rtl::OStringBuffer message; + message.append( "SfxModule::GetFieldUnit: no metric item in the module implemented by '" ); + message.append( typeid( *pModule ).name() ); + message.append( "'!" ); + OSL_ENSURE( false, message.makeStringAndClear().getStr() ); +#endif return FUNIT_100TH_MM; } return (FieldUnit)( (SfxUInt16Item*)pItem )->GetValue(); diff --git a/vcl/unx/generic/printer/ppdparser.cxx b/vcl/unx/generic/printer/ppdparser.cxx index f5c1836..a236e5f 100644 --- a/vcl/unx/generic/printer/ppdparser.cxx +++ b/vcl/unx/generic/printer/ppdparser.cxx @@ -811,69 +811,35 @@ PPDParser::PPDParser( const String& rFile ) : m_pImageableAreas = getKey( String( RTL_CONSTASCII_USTRINGPARAM( "ImageableArea" ) ) ); if( m_pImageableAreas ) m_pDefaultImageableArea = m_pImageableAreas->getDefaultValue(); - DBG_ASSERT( - m_pImageableAreas, - OSL_FORMAT( - "Warning: no ImageableArea in %s\n", - rtl::OUStringToOString(m_aFile, RTL_TEXTENCODING_UTF8).getStr())); - DBG_ASSERT( - m_pDefaultImageableArea, - OSL_FORMAT( - "Warning: no DefaultImageableArea in %s\n", - rtl::OUStringToOString(m_aFile, RTL_TEXTENCODING_UTF8).getStr())); + DBG_ASSERT( m_pImageableAreas, "Warning: no ImageableArea in PPD\n" ); + DBG_ASSERT( m_pDefaultImageableArea, "Warning: no DefaultImageableArea in PPD\n" ); m_pPaperDimensions = getKey( String( RTL_CONSTASCII_USTRINGPARAM( "PaperDimension" ) ) ); if( m_pPaperDimensions ) m_pDefaultPaperDimension = m_pPaperDimensions->getDefaultValue(); - DBG_ASSERT( - m_pPaperDimensions, - OSL_FORMAT( - "Warning: no PaperDimensions in %s\n", - rtl::OUStringToOString(m_aFile, RTL_TEXTENCODING_UTF8).getStr())); - DBG_ASSERT( - m_pDefaultPaperDimension, - OSL_FORMAT( - "Warning: no DefaultPaperDimensions in %s\n", - rtl::OUStringToOString(m_aFile, RTL_TEXTENCODING_UTF8).getStr())); + DBG_ASSERT( m_pPaperDimensions, "Warning: no PaperDimension in PPD\n" ); + DBG_ASSERT( m_pDefaultPaperDimension, "Warning: no DefaultPaperDimension in PPD\n" ); m_pResolutions = getKey( String( RTL_CONSTASCII_USTRINGPARAM( "Resolution" ) ) ); if( m_pResolutions ) m_pDefaultResolution = m_pResolutions->getDefaultValue(); - DBG_ASSERT( - m_pResolutions, - OSL_FORMAT( - "Warning: no Resolution in %s\n", - rtl::OUStringToOString(m_aFile, RTL_TEXTENCODING_UTF8).getStr())); - DBG_ASSERT( - m_pDefaultResolution, - OSL_FORMAT( - "Warning: no DefaultResolution in %s\n", - rtl::OUStringToOString(m_aFile, RTL_TEXTENCODING_UTF8).getStr())); + DBG_ASSERT( m_pResolutions, "Warning: no Resolution in PPD\n" ); + DBG_ASSERT( m_pDefaultResolution, + rtl::OStringBuffer("Warning: no DefaultResolution in "). + append(rtl::OUStringToOString(rFile, osl_getThreadTextEncoding())).append('\n').getStr() ); m_pInputSlots = getKey( String( RTL_CONSTASCII_USTRINGPARAM( "InputSlot" ) ) ); if( m_pInputSlots ) m_pDefaultInputSlot = m_pInputSlots->getDefaultValue(); - DBG_ASSERT( - m_pInputSlots, - OSL_FORMAT( - "Warning: no InputSlot in %s\n", - rtl::OUStringToOString(m_aFile, RTL_TEXTENCODING_UTF8).getStr())); - DBG_ASSERT( - m_pDefaultInputSlot, - OSL_FORMAT( - "Warning: no DefaultInputSlot in %s\n", - rtl::OUStringToOString(m_aFile, RTL_TEXTENCODING_UTF8).getStr())); + DBG_ASSERT( m_pPaperDimensions, "Warning: no InputSlot in PPD\n" ); + DBG_ASSERT( m_pDefaultPaperDimension, "Warning: no DefaultInputSlot in PPD\n" ); m_pDuplexTypes = getKey( String( RTL_CONSTASCII_USTRINGPARAM( "Duplex" ) ) ); if( m_pDuplexTypes ) m_pDefaultDuplexType = m_pDuplexTypes->getDefaultValue(); m_pFontList = getKey( String( RTL_CONSTASCII_USTRINGPARAM( "Font" ) ) ); - DBG_ASSERT( - m_pFontList, - OSL_FORMAT( - "Warning: no Font in %s\n", - rtl::OUStringToOString(m_aFile, RTL_TEXTENCODING_UTF8).getStr())); + DBG_ASSERT( m_pFontList, "Warning: no Font in PPD\n" ); // fill in direct values if( (pKey = getKey( String( RTL_CONSTASCII_USTRINGPARAM( "ModelName" ) ) )) ) _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits