fix issues 1261
fix https://github.com/tiann/KernelSU/issues/1261
#816
I think this may cause other issues
#816
I think this may cause other issues
我检查了你给的这个 issue,发现如果用 mv -f ,我之前的修复会导致 product 已经存在的情况下无法被合并。可以用 cp -rf 来解决这个问题,代码已经更新,按照新的解决方法,可以看看修改后下面两种 case 分别会怎么执行
假设 MODPATH=/data/adb/modules/myapp
CASE1
REMOVE="
/system/product/app/A
"
模块内文件结构如下
/data/adb/modules/myapp
└── system
└── product
└── app
└── B
此时 mark_remove 会执行如下命令
mkdir -p /data/adb/modules/myapp/system/product/app
mknod /data/adb/modules/myapp/system/product/app/A c 0 0
chmod 644 /data/adb/modules/myapp/system/product/app/A
接下来 handle_partition 会执行
cp -rf /data/adb/modules/myapp/system/product /data/adb/modules/myapp/ && rm -rf /data/adb/modules/myapp/system/product && ln -sf ../product /data/adb/modules/myapp/system/product
执行完模块结构是这样的
/data/adb/modules/myapp
├── product
│ └── app
│ ├── A
│ └── B
└── system
└── product -> ../product
CASE1 执行结果符合预期
CASE2
REMOVE="
/product/app/A
"
模块内文件结构如下
/data/adb/modules/myapp
└── system
└── product
└── app
└── B
此时 mark_remove 会执行如下命令
mkdir -p /data/adb/modules/myapp/product/app
mknod /data/adb/modules/myapp/product/app/A c 0 0
chmod 644 /data/adb/modules/myapp/product/app/A
接下来 handle_partition 会执行
cp -rf /data/adb/modules/myapp/system/product /data/adb/modules/myapp/ && rm -rf /data/adb/modules/myapp/system/product && ln -sf ../product /data/adb/modules/myapp/system/product
执行完模块结构是这样的
/data/adb/modules/myapp
├── product
│ └── app
│ ├── A
│ └── B
└── system
└── product -> ../product
CASE2 执行结果符合预期
Why not merge it?It works properly
cp -rf 后 rm -rf 与 mv 的行为有很多地方不一样,比如:
- mv 的过程很快,不会改变文件属性,但 cp 做不到。
- mv 可以保留特殊文件,比如符号连接,设备文件等,cp 后会变成普通文件。
在没有充分的证据之前,我认为这个修复会带来更多的问题。而本 issue 的问题,可以通过其他的方式规避。
但 cp 做不到。
Sorry I don't speak chinese and I translated with google, I hope is correct, but cp can preserve timestamp, owernship, device, symbolic link with parameter -a or another alternative is use tar.
- tar cf
- rm -rf
- tar xf
- ln -s