Difference between revisions of "Tips zh"

From Apache OpenOffice Wiki
Jump to: navigation, search
 
Line 2: Line 2:
 
== 获取OO.o的CVS帐户 ==
 
== 获取OO.o的CVS帐户 ==
  
下面是获取上传CVS服务器帐户的流程,(ooo-build帐户使用[http://go-oo.org/ooo-build.html#section-2.5.1 不同的方式])。[http://www.openoffice.org/issues/show_bug.cgi?id=7270 issue i#7270#]说明了就此提交issue的流程。帐户设置好之后,需要用类似下面的命令tunnel到CVS服务器上:
+
下面是获取CVS服务器上传帐户的流程,(ooo-build帐户使用[http://go-oo.org/ooo-build.html#section-2.5.1 不同的方式])。[http://www.openoffice.org/issues/show_bug.cgi?id=7270 issue i#7270#]说明了就此提交issue的流程。帐户设置好之后,需要用类似下面的命令tunnel到CVS服务器上:
 
  ssh -f -2 -P -L 2401:localhost:2401 tunnel@openoffice.org sleep 1400 < /dev/null > /dev/null
 
  ssh -f -2 -P -L 2401:localhost:2401 tunnel@openoffice.org sleep 1400 < /dev/null > /dev/null
 
然后需要修改你的CVSROOT,将其指向你本地的机器,因为这是tunnel的终点:
 
然后需要修改你的CVSROOT,将其指向你本地的机器,因为这是tunnel的终点:
Line 19: Line 19:
 
'''-u'''
 
'''-u'''
  
生成
+
生成包含上下文的diff文件。
  
有利于patch的审阅人理解它的目的并把它加到也同时在变化的代码中。
+
更有利于patch的审阅人理解它的目的并把它加到也同时在变化的代码中。
  
 
'''-P'''
 
'''-P'''
Line 27: Line 27:
 
显示每个修改位于哪个C函数中。
 
显示每个修改位于哪个C函数中。
  
 +
'''-N'''
  
未完成待续……
+
新文件,将缺少的文件当作空文件处理。
 +
 
 +
可以有效地把新文件的内容包括在diff文件中,否则会漏掉它们。
 +
 
 +
*当你对后果不很确定时,先运行patch --dry-run,这样可以显示patch的结果,但并不真正patch[对于具*有复杂的内部依赖关系的patch这可能会得到虚假的结果,但仍然很有用]。
 +
*大多情况下使用patch -p0;0强调了从被diff的文件的路径头部去掉了0个路径元素。
 +
*当你弄乱了,比如只应用了半个patch,想要转回clean的文件的时候,可以删除文件并使用cvs update,或者使用'-R'选项重新patch来消除上一次的结果。
 +
*有时对包含了很多空白增减的模块使用diff会使patch非常难于阅读;用'-w'选项来(cvs) diff 可以让这容易些。
 +
 
 +
对ooo-build提交一个patch之前,先在根目录使用make patch.apply测试一下,注意。保存两份代码非常值得 - 一份hack过的,一份原始的。
 +
== Make clean ==
 +
在build/src680目录使用dmake clean就可以了。或者在ooo-build里使用rm -Rf build。
 +
== CVS设置 ==
 +
为了更有效地利用网络带宽,应默认生成正确的diff文件,并坚持这一习惯,在你的~/.cvsrc里使用以下命令。
 +
cvs -z3 -q
 +
diff -upN
 +
update -dP
 +
checkout -P
 +
status -v
 +
== 给build增加头文件 ==
 +
给OO.o build添加头文件向来以繁杂著称。要在external/下添加头文件,先确定你把它们添加到了external/prj/d.lst中,这样在build的时候它们才会被拷贝到sover/680/unxlngi4.pro/inc/external 目录下。
 +
== 寻找hack的位置 ==
 +
你想要定位/修改的地方往往和某些GUI元素有关。所以,在[http://go-ooo.org/lxr LXR's]的text search里查找一些足够特别的字符串;这可以找到与这个字符串有关的标识符;例如SID_AUTOFORMAT,或者FN_NUM_BULLET_ON等等。找到之后,对它再进行查找,就可以找到用途[或者一串对其它东西的定义]。对于例如菜单/工具栏按钮,功能部分通常在一个case语句中,比如case SID_AUTOFORMAT: ...
 +
== 添加一个UNO接口 ==
 +
这可能比你想像的更复杂些。
 +
*添加一个IDL文件offapi/com/sun/star/wherever/Foo.idl。
 +
*如果wherever不是一个新路径,把Fool.idl添加到wherever/makefile.mk的IDLFILES里。
 +
*如果wherever是一个新路径,修改offapi/util/makefile.mk,在其中引用相关的TARGET.db,prolly whatever.db
 +
*如果wherever是一个新路径,应对offapi/prj/d.lst和build.lst做正确的修改。
 +
这可以使你定义的类型的信息build和install到types.rdb里。但这只是一部分:offuh模块build并install我们(在C++里)需要的的.hdl/hpp文件,所以如果wherever是一个新路径,我们也需要更新offuh/prj/d.lst来安装这些文件。
 +
 
 +
最后,检查types.rdb,看install set里是否包含了你定义的类型,使用regview types.rdb/ | grep 'whatever' -i就可以做到这点。如果发现没有,应当手动从solver里拷贝types.rdb。
 +
== 创建一个新的顶级模块 ==
 +
[[New Module | 这里]]讲述了关于把外部的代码引入OOo build环境中的技术细节。如何在CWS里控制新模块的过程在[[CWS#Create a new module |这篇]]CWS-HowTo里有讲解。
 +
== 找出你使用的OOo是什么版本 ==
 +
打开关于对话框(帮助菜单的最后一项),按住<Ctrl>键,然后依次按S D T键。开始滚动时第一行(紧靠OK按钮下面)给出了内部的里程碑号码和build ID。
 +
== 扩展阅读 ==
 +
* [[Using_Cpp_with_the_OOo_SDK|Using C++ with the OOoSDK]]
 +
* [[:Category:Developer_Tools|Developer tools]]
 +
* [[Building OpenOffice.org]]
 +
* [[CWS|Working with Childworkspaces]]
 +
 
 +
[[Category:Development]]

Revision as of 11:05, 12 August 2007

Tips_en

获取OO.o的CVS帐户

下面是获取CVS服务器上传帐户的流程,(ooo-build帐户使用不同的方式)。issue i#7270#说明了就此提交issue的流程。帐户设置好之后,需要用类似下面的命令tunnel到CVS服务器上:

ssh -f -2 -P -L 2401:localhost:2401 tunnel@openoffice.org sleep 1400 < /dev/null > /dev/null

然后需要修改你的CVSROOT,将其指向你本地的机器,因为这是tunnel的终点:

:pserver:mmeeks@localhost:/cvs

你的帐户名和密码 - 和你在SourceCast系统里用来提交bug等等的相同。登录,然后……你很快就会发现需要把你的CVS设置移到新服务器上,为了不重复checkout而浪费带宽,应当这样做:

bin/re-root /path/to/checkout ":pserver:<account-name-here>@localhost:/cvs"

当然,要提交东西,你还需要各种项目权限 - 并且要和官僚主义斗争。

使用patch和diff

patch和diff是很棒的工具,但人们给出的数据经常杂乱而难于整理,使得它们无法工作。下面的窍门教你对付杂乱的数据。

生成diff文件时,请对你checkout的文件版本使用 diff -upN。

后面的选项代表:

-u

生成包含上下文的diff文件。

更有利于patch的审阅人理解它的目的并把它加到也同时在变化的代码中。

-P

显示每个修改位于哪个C函数中。

-N

新文件,将缺少的文件当作空文件处理。

可以有效地把新文件的内容包括在diff文件中,否则会漏掉它们。

  • 当你对后果不很确定时,先运行patch --dry-run,这样可以显示patch的结果,但并不真正patch[对于具*有复杂的内部依赖关系的patch这可能会得到虚假的结果,但仍然很有用]。
  • 大多情况下使用patch -p0;0强调了从被diff的文件的路径头部去掉了0个路径元素。
  • 当你弄乱了,比如只应用了半个patch,想要转回clean的文件的时候,可以删除文件并使用cvs update,或者使用'-R'选项重新patch来消除上一次的结果。
  • 有时对包含了很多空白增减的模块使用diff会使patch非常难于阅读;用'-w'选项来(cvs) diff 可以让这容易些。

对ooo-build提交一个patch之前,先在根目录使用make patch.apply测试一下,注意。保存两份代码非常值得 - 一份hack过的,一份原始的。

Make clean

在build/src680目录使用dmake clean就可以了。或者在ooo-build里使用rm -Rf build。

CVS设置

为了更有效地利用网络带宽,应默认生成正确的diff文件,并坚持这一习惯,在你的~/.cvsrc里使用以下命令。

cvs -z3 -q
diff -upN
update -dP
checkout -P
status -v

给build增加头文件

给OO.o build添加头文件向来以繁杂著称。要在external/下添加头文件,先确定你把它们添加到了external/prj/d.lst中,这样在build的时候它们才会被拷贝到sover/680/unxlngi4.pro/inc/external 目录下。

寻找hack的位置

你想要定位/修改的地方往往和某些GUI元素有关。所以,在LXR's的text search里查找一些足够特别的字符串;这可以找到与这个字符串有关的标识符;例如SID_AUTOFORMAT,或者FN_NUM_BULLET_ON等等。找到之后,对它再进行查找,就可以找到用途[或者一串对其它东西的定义]。对于例如菜单/工具栏按钮,功能部分通常在一个case语句中,比如case SID_AUTOFORMAT: ...

添加一个UNO接口

这可能比你想像的更复杂些。

  • 添加一个IDL文件offapi/com/sun/star/wherever/Foo.idl。
  • 如果wherever不是一个新路径,把Fool.idl添加到wherever/makefile.mk的IDLFILES里。
  • 如果wherever是一个新路径,修改offapi/util/makefile.mk,在其中引用相关的TARGET.db,prolly whatever.db
  • 如果wherever是一个新路径,应对offapi/prj/d.lst和build.lst做正确的修改。

这可以使你定义的类型的信息build和install到types.rdb里。但这只是一部分:offuh模块build并install我们(在C++里)需要的的.hdl/hpp文件,所以如果wherever是一个新路径,我们也需要更新offuh/prj/d.lst来安装这些文件。

最后,检查types.rdb,看install set里是否包含了你定义的类型,使用regview types.rdb/ | grep 'whatever' -i就可以做到这点。如果发现没有,应当手动从solver里拷贝types.rdb。

创建一个新的顶级模块

这里讲述了关于把外部的代码引入OOo build环境中的技术细节。如何在CWS里控制新模块的过程在这篇CWS-HowTo里有讲解。

找出你使用的OOo是什么版本

打开关于对话框(帮助菜单的最后一项),按住<Ctrl>键,然后依次按S D T键。开始滚动时第一行(紧靠OK按钮下面)给出了内部的里程碑号码和build ID。

扩展阅读

Personal tools