How to fix an issue in OpenOffice.org Michel Loiseleur Wednesday, 19th of September, 2007 [email protected] Who am I ● There was the day before meeting OOo Open Source Software Assurance ● One place to fix'em all ● A guaranted time of correction (SLA) ● Patches are contributed to community The real OS world You Linagora's answer You The Goal Fix an issue in less than 5 days The tools ● ● Forget tools like – Eclipse – Visual Studio – Anjuta – Kdevelop The code source is too big for them The tools ● You have choices between – Emacs – Vim – SlickEdit (Commercial) – MSDev (Commercial) ● See Developer_Tools in the wiki ● Cscope will be your saviour The source code ● As of SRC680_m224, there is 1,9 Gb of sources The source code ● So many code, but hey, do not panic – 100 folders which are < 2Mbs – helpcontent2 (480Mbs) won't need any patch – 19 external library (sometimes patched) – binfilter (62Mbs) is a SO 5.2 The source code ● Actually, it can be shortened like this The source code ● ● You will probably hack in one of those : – vcl : Visual Component Library (15 MB) – sw : Writer (71 MB) – sc, scaddins, scsolver : Calc (80 MB) – sd, svx : Draw & Impress (114 MB) In those folders lies easily 80% of issues What does it look like sc/source/ui/docshell/docfunc.cxx: ScPostIt aNote(pDoc); // Zeichenobjekt updaten //! bei gelocktem Paint auch erst spaeter !!! ScDetectiveFunc aDetFunc( pDoc, rPos.Tab() ); aDetFunc.ShowComment( rPos.Col(), rPos.Row(), FALSE ); // FALSE: nur wenn gefunden } The saviour ● – http://lxr.go-oo.org as an alternative – don't ever activate one of the graph options ScDocument ● 652 public members ● 2 static public members ● 2 public attributes ● 30 private members ● 112 private attributes ● 10 friend classes The source code ● That was only one class ● There are 1977 classes in Calc ● How can one be able to fix issue in this ? Tips #1 Don't procrastinate Just Do it Find an issue ● Sample #1: i7500 – I can't copy and paste on merged cells – It comes with this message box : "Cell merge not possible if cells already merged!" Understand the issue Find the code ● We have an error message so... ● We can find the corresponding code (!) ● grep it and « voilà », in globstr.src – STR_MSSG_PASTEFROMCLIP_1 – STR_MSSG_MOVEBLOCKTO_0 – STR_MSSG_MERGECELLS_0 Find the file ● an other grep on « PASTEFROMCLIP » : ● source/ui/view/viewfun3.cxx:993: if (bClipOver) if (lcl_SelHasAttrib(...,HASATTR_OVERLAPPED )) { ErrorMessage(STR_MSSG_PASTEFROMCLIP_1); delete pTransClip; return FALSE; } Fix it if (bClipOver) if (lcl_SelHasAttrib(...,HASATTR_OVERLAPPED )) { ScRange destRange( ... ); pDocSh->GetDocFunc(). UnmergeCells(destRange, FALSE, TRUE); } That's all folks Tips #2 You have to know how to fix the issue BEFORE you look at the code Find an issue ● ● Sample #2: i51564 – Open Calc. – Fill values A1=1,A2=2,A3=3 – Select A1,A2,A3 – Click on "SUM" symbol on the formula toolbar All the selected values becomes 0 or #REF! Find the code ● A grep on « sum » gave ~ 1000 results ● The feature create a « sum » formula ● It must use some kind of operation code ● grep on 'SUM_IF' to find where are opcodes ● grep on 'SC_OPCODE_SUM' gave 2 files : – source/core/tool/appoptio.cxx:106 – source/ui/view/viewfun2.cxx:725 The Fix ● ● It was – 10 pages of specifications – 5 versions of the patch – collaboration between 5 people for about 30 lines of C++ code At the end ● We took more time to think to – ● How we want the fix to behave Than to – Really fix it with writing code Find an issue ● ● ● Sample #3 : i74651 Removing with API an image from a Calc document does not change the modified state of the document. It can even cause crashes if the document was not saved Crash Really easy. It's tracked in 3 steps : 1. Grab name of files from the trace 2. Recompile only them with $ build debug=TRUE 3. Launch gdb Uno API ● More difficult. A search in developer guide Uno API ● The invalid call is « remove » on a « DrawPage ». ● That's the only valid entry point to look. ● http://lxr.go-oo.org returns nothing ● Time to use doxygen on SD and on SVX – SdDrawPage::remove – SvxDrawPage::remove Uno API : The fix ● After finding the code ● Find how to use the Undo* API ● ● The faster way is to take a look at how it is called The gigantic code size of OpenOffice.org Code can become an advantage Tips #3 Always look at a reference code BEFORE using an API call After one year ● Goal attained ● My last issue took less – ● than 15 minutes to fix You can make it too Thanks for your attention [email protected]
© Copyright 2024