找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 1911|回复: 6

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

[复制链接]
发表于 2010-12-7 17:58 | 显示全部楼层 |阅读模式
昨天手动解决了一个补丁冲突。
7 Q/ C" F1 L* S7 G  \5 j6 @把patch解开看了看,貌似比较简单,定位是寻找行号,如果上下文合适就加入或者去掉某一行,用+ -来标识。
. |- q. D" v. h$ f9 [: [/ {补丁打不上的冲突就在于先前的补丁破坏了原始行号,导致上下文不匹配。% L) b  _# Q$ p2 H5 L
我想能不能这样,修改一下preware,增加一点语法的parser:对于删除修改某语句的补丁,用全字匹配寻找行。对于增加某语句的补丁,首先扫描修饰要修改的系统文件,在js的变量声明啊、类啊、html的div>尾部等等 可以接受append的地方加上标记。2 A, p7 J" I  @5 `5 d/ H6 G* B" o+ v
或者,也可以简单一点,不用parser,对于干净的新系统,每次打完补丁都在修改的最后留下append标记。" e3 d; L' {4 X* v+ t2 G$ ]
这样是否可以彻底避免补丁冲突的情况?
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2010-12-9 19:15 | 显示全部楼层
楼主的想法很不严谨
0 \8 A' d) s6 X! W. a如果其中我有两段代码完全一样但上下文不一样$ Z+ T0 E0 A7 k3 s0 F0 u
只需要patch其中一处
% i2 O+ q" u1 [$ b2 i你怎么处理?
回复 支持 反对

使用道具 举报

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

回复 地板4# laris 的帖子

这是一个初步的想法。
+ `: r8 z8 [6 i+ \8 E! n而且最近我发现,其实preware的patch已经有类似的机制了。只要遵循它的语法规则是不会出现补丁冲突的,出现冲突一定是其他的因素修改了文件,比如网友自制的补丁,或者手动修改了脚本。6 a3 y- F0 [% d' K# F
老外的软件工程素养还是很高的
回复 支持 反对

使用道具 举报

发表于 2010-12-12 21:16 | 显示全部楼层
其实不是preware的patch,gnu patch已经在开源软件界是一个很成熟的工具了
+ m# i. d9 B$ v2 f- ^' k它允许你的行号不一样,可以hunk patch suceed,只要patch的地方和上下方一致就能patch成功
- \1 L: Y8 G5 V3 ]2 s不成功是因为你要patch的部分出现了两种情况:
, e5 P. |$ r; _( e- r& j$ m1.代码不一致" I- C% J$ C5 B4 w
2.上下文不一致) c* O8 N7 e, @1 f; p0 l
3.行号不一致不是问题
( }( a+ I& }' j. t  n8 A0 r) T# W+ E
patch会一定有冲突的  l4 i8 Z. m2 {- J% i1 }
ipk包现在混乱的很,因为它不是对源码进行的包的封装,没有负责维护的开发者,没有冲突信息也没办法有,/ Z' e" Y- P9 U8 g' s, l- [1 h
而且也没有反馈系统来平衡这些bug的冲突
0 `* J7 b! ~- R) _# Q4 Y2 K/ o+ S4 x, w) x2 {9 ?# b* \- o
所以,我觉得这套东西完全是不完备的一个机制,凑和玩就成了
回复 支持 反对

使用道具 举报

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

回复 6楼 laris 的帖子

这跟gnu patch 不完全像,gnu patch是针对源码的,按照update log来的。这东西根本没有log。
( s, r% ]$ n% x! J* B: _这个patch就是修改一下js html css这种配置脚本类的东西。
" Q/ c! n2 z) F1 q4 _; {) _! f! i+ [你说的对,这是个非常不完备的机制。使用preware 提供的patch的好处是,他们都有一个统一的备份文件而已。自制的patch没有更新这个备份文件,当然就出现所谓的冲突咯。
% X# m& X$ I( ?4 S5 k- O' O3 [& ?- [: v0 U' ~
[ Edited by bemoon on 2010-12-13 15:56 ]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-20 04:25 , Processed in 0.298062 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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