Skip to content

Commit 6989408

Browse files
committed
feat(nuke): support -p flag for persist file cleanup
nuke_persist() clears the on-disk persist entry alongside the mmap'd area nuke, preventing reappearance after reboot.
1 parent 7f73178 commit 6989408

3 files changed

Lines changed: 16 additions & 1 deletion

File tree

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,9 @@ resetprop-rs -p -d persist.sys.timezone
199199
resetprop-rs --nuke ro.lineage.version
200200
resetprop-rs -nk ro.lineage.version # short alias
201201

202+
# Nuke from both memory and persist file
203+
resetprop-rs -p --nuke persist.sys.timezone
204+
202205
# Hexpatch delete (replaces name with dictionary words, keeps trie intact)
203206
resetprop-rs --hexpatch-delete ro.lineage.version
204207

@@ -216,7 +219,7 @@ resetprop-rs --compact
216219
| `-p` | Persist mode: write/delete affects both memory and `/data/property/` on disk |
217220
| `-P` | Read from the persist file on disk, not from the mmap'd property area |
218221
| `-d NAME` | Delete a property |
219-
| `--nuke NAME`, `-nk NAME` | Count-preserving stealth delete (delete + replacement + compact) |
222+
| `--nuke NAME`, `-nk NAME` | Count-preserving stealth delete (delete + replacement + compact). Combine with `-p` for persist |
220223
| `--hexpatch-delete NAME` | Stealth delete with dictionary-based name replacement |
221224
| `--compact` | Defragment arenas after deletes |
222225
| `-f FILE` | Load `name=value` pairs from a file |
@@ -271,6 +274,7 @@ sys.delete_persist("persist.sys.timezone")?;
271274

272275
// nuke: count-preserving stealth delete
273276
sys.nuke("ro.lineage.version")?;
277+
sys.nuke_persist("persist.sys.timezone")?;
274278

275279
// hexpatch delete (dictionary-based name destruction)
276280
sys.hexpatch_delete("ro.custom.prop")?;

crates/resetprop-cli/src/main.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ fn run() -> Result<(), String> {
8383
}
8484

8585
if let Some(name) = nuke {
86+
if persist {
87+
return bool_op(sys.nuke_persist(&name), &name, "nuked(persist)", verbose);
88+
}
8689
return bool_op(sys.nuke(&name), &name, "nuked", verbose);
8790
}
8891

@@ -239,6 +242,7 @@ Usage:
239242
resetprop --stealth|-st -p NAME VALUE Set stealth + persist to disk
240243
resetprop --hexpatch-delete NAME Stealth delete (name destruction)
241244
resetprop --nuke|-nk NAME Count-preserving stealth delete
245+
resetprop -p --nuke|-nk NAME Nuke from both prop_area and persist file
242246
resetprop --compact Defragment arenas after deletes
243247
resetprop -f FILE Load properties from file (name=value)
244248
resetprop --dir PATH Use custom property directory

crates/resetprop/src/lib.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,13 @@ impl PropSystem {
466466
Ok(false)
467467
}
468468

469+
pub fn nuke_persist(&self, name: &str) -> Result<bool> {
470+
let mem = self.nuke(name)?;
471+
let mut store = PersistStore::load()?;
472+
let disk = store.delete(name)?;
473+
Ok(mem || disk)
474+
}
475+
469476
/// Compacts all writable areas, reclaiming space from deleted properties.
470477
/// Returns the number of areas that were actually compacted.
471478
pub fn compact(&self) -> Result<usize> {

0 commit comments

Comments
 (0)