找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 1892|回复: 6

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

[复制链接]
发表于 2010-12-7 17:58 | 显示全部楼层 |阅读模式
昨天手动解决了一个补丁冲突。5 J  Q: ?3 @2 [! u# C; i: n9 V1 \
把patch解开看了看,貌似比较简单,定位是寻找行号,如果上下文合适就加入或者去掉某一行,用+ -来标识。
2 Q4 m: O" U9 u0 f补丁打不上的冲突就在于先前的补丁破坏了原始行号,导致上下文不匹配。8 B6 W( c. P1 v5 B* [5 n
我想能不能这样,修改一下preware,增加一点语法的parser:对于删除修改某语句的补丁,用全字匹配寻找行。对于增加某语句的补丁,首先扫描修饰要修改的系统文件,在js的变量声明啊、类啊、html的div>尾部等等 可以接受append的地方加上标记。
: X- T4 g/ ]3 f! u& K: u& V- R! l9 ^或者,也可以简单一点,不用parser,对于干净的新系统,每次打完补丁都在修改的最后留下append标记。
( L+ w) Q, s* L5 L9 h2 m* S这样是否可以彻底避免补丁冲突的情况?
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2010-12-9 19:15 | 显示全部楼层
楼主的想法很不严谨
3 \2 L! w  [# H' u3 q6 X: @如果其中我有两段代码完全一样但上下文不一样/ k- a( M: j  W( F5 [' W- d
只需要patch其中一处+ n5 N" i- }) |( k! B
你怎么处理?
回复 支持 反对

使用道具 举报

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

回复 地板4# laris 的帖子

这是一个初步的想法。' p, H. R6 s' G! X) X  M8 V9 |
而且最近我发现,其实preware的patch已经有类似的机制了。只要遵循它的语法规则是不会出现补丁冲突的,出现冲突一定是其他的因素修改了文件,比如网友自制的补丁,或者手动修改了脚本。
2 G( h+ g1 x' J. R2 ~老外的软件工程素养还是很高的
回复 支持 反对

使用道具 举报

发表于 2010-12-12 21:16 | 显示全部楼层
其实不是preware的patch,gnu patch已经在开源软件界是一个很成熟的工具了
& }' D, d9 g) v" ?) s2 H! d. y它允许你的行号不一样,可以hunk patch suceed,只要patch的地方和上下方一致就能patch成功. X, R  S5 C) W2 U/ ?# f/ B
不成功是因为你要patch的部分出现了两种情况:" m/ m8 d1 N) A* Z& ~
1.代码不一致3 K2 o* P" ]' G
2.上下文不一致: Q$ m/ w& C6 d7 M7 \+ |
3.行号不一致不是问题
! `2 E$ V( m9 |% n9 k8 A& Q* ^8 N* `$ L( K
patch会一定有冲突的
. u. }: B7 ^$ l6 qipk包现在混乱的很,因为它不是对源码进行的包的封装,没有负责维护的开发者,没有冲突信息也没办法有,
- C+ ^* s) Q0 ^而且也没有反馈系统来平衡这些bug的冲突/ r/ x& z6 g2 B( }- ]6 F

8 U: V( O; M5 g$ i% L$ }所以,我觉得这套东西完全是不完备的一个机制,凑和玩就成了
回复 支持 反对

使用道具 举报

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

回复 6楼 laris 的帖子

这跟gnu patch 不完全像,gnu patch是针对源码的,按照update log来的。这东西根本没有log。! Z- @/ k& \6 O8 h4 E6 G
这个patch就是修改一下js html css这种配置脚本类的东西。
% I2 X" |6 l( {$ O你说的对,这是个非常不完备的机制。使用preware 提供的patch的好处是,他们都有一个统一的备份文件而已。自制的patch没有更新这个备份文件,当然就出现所谓的冲突咯。
9 Y- S$ N, y5 ^4 S; p$ T9 T2 E, C' \4 R7 a
[ Edited by bemoon on 2010-12-13 15:56 ]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 06:59 , Processed in 0.302814 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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