找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 1963|回复: 6

[webOS开发] 关于补丁的一点想法。

[复制链接]
发表于 2010-12-7 17:58 | 显示全部楼层 |阅读模式
昨天手动解决了一个补丁冲突。* e+ [7 {$ p% }: [. t
把patch解开看了看,貌似比较简单,定位是寻找行号,如果上下文合适就加入或者去掉某一行,用+ -来标识。
, @; S6 X  j9 {0 n" M3 T0 D) Z( J1 w补丁打不上的冲突就在于先前的补丁破坏了原始行号,导致上下文不匹配。
- s  |7 i8 \, y* u' E; A我想能不能这样,修改一下preware,增加一点语法的parser:对于删除修改某语句的补丁,用全字匹配寻找行。对于增加某语句的补丁,首先扫描修饰要修改的系统文件,在js的变量声明啊、类啊、html的div>尾部等等 可以接受append的地方加上标记。1 _! ?2 o; e. D9 ]& n) z) }
或者,也可以简单一点,不用parser,对于干净的新系统,每次打完补丁都在修改的最后留下append标记。
; E9 U( y7 r0 N8 D这样是否可以彻底避免补丁冲突的情况?
回复

使用道具 举报

发表于 2010-12-7 22:59 | 显示全部楼层
新数据替换旧数据之前要检测旧数据是否匹配,不匹配就不准刷入。这种patch方式在其他一些系统的很通用,主要就是防止系统崩溃。
3 d, A2 b% t4 l比较通融的做法是允许强刷,就是即使检测旧数据到不匹配允许强行替换,前提是会自动保存备份,防止出错后可以修复,而关系到系统运行核心部分是设置写保护的,决不许强刷。
回复 支持 反对

使用道具 举报

发表于 2010-12-8 10:00 | 显示全部楼层
高级...我看不懂啊..
回复 支持 反对

使用道具 举报

发表于 2010-12-9 19:15 | 显示全部楼层
楼主的想法很不严谨
  g& @5 {2 r1 \2 [如果其中我有两段代码完全一样但上下文不一样
5 M) H' J3 q7 u; E+ W- o只需要patch其中一处0 P, ]; ?( m9 \! \8 n/ ^
你怎么处理?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-12-11 16:04 | 显示全部楼层

回复 地板4# laris 的帖子

这是一个初步的想法。% _% T4 o2 T4 s$ B, Z+ I; i1 ]
而且最近我发现,其实preware的patch已经有类似的机制了。只要遵循它的语法规则是不会出现补丁冲突的,出现冲突一定是其他的因素修改了文件,比如网友自制的补丁,或者手动修改了脚本。
  X; j, t" B4 N4 Y; C! Q0 n老外的软件工程素养还是很高的
回复 支持 反对

使用道具 举报

发表于 2010-12-12 21:16 | 显示全部楼层
其实不是preware的patch,gnu patch已经在开源软件界是一个很成熟的工具了
& |/ l7 Z* Z. O它允许你的行号不一样,可以hunk patch suceed,只要patch的地方和上下方一致就能patch成功$ j2 V# x% S1 u( ?9 b  t5 p' R! G2 D
不成功是因为你要patch的部分出现了两种情况:
# C$ m) V! |5 P7 r, [: d1.代码不一致. d9 ?' V9 Y$ P% T( d! }5 i
2.上下文不一致& |7 `- }# ]/ I  B$ Z7 o' Y; g8 @
3.行号不一致不是问题; {; v/ ?6 k( L* d# I9 U
2 D4 j# T/ i3 I4 F
patch会一定有冲突的# F) {# ~) F9 j; `( F
ipk包现在混乱的很,因为它不是对源码进行的包的封装,没有负责维护的开发者,没有冲突信息也没办法有,' F% l, v6 u$ \% m, z' W, t0 g
而且也没有反馈系统来平衡这些bug的冲突8 _0 [/ S2 m" k, {: N
, G4 @* w! o( Y5 c
所以,我觉得这套东西完全是不完备的一个机制,凑和玩就成了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-12-13 15:42 | 显示全部楼层

回复 6楼 laris 的帖子

这跟gnu patch 不完全像,gnu patch是针对源码的,按照update log来的。这东西根本没有log。# n# A) ~9 \7 V' G' r, I& ]' a! u
这个patch就是修改一下js html css这种配置脚本类的东西。( H0 g6 W0 M5 [& ?; @
你说的对,这是个非常不完备的机制。使用preware 提供的patch的好处是,他们都有一个统一的备份文件而已。自制的patch没有更新这个备份文件,当然就出现所谓的冲突咯。
7 \' D# r& x6 o' s. n6 F: Q+ L# l; @
[ Edited by bemoon on 2010-12-13 15:56 ]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|Archiver|手机版|小黑屋|吹友吧 ( 京ICP备05078561号 )

GMT+8, 2025-4-2 14:52 , Processed in 0.236490 second(s), 16 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表