Files
ipsw/internal/diff/ipsw_session.go
blacktop e209828c31 feat(diff): add cacheable task-based reports
Refactor diff jobs into task-owned renderers with persistent cache support, root-confined walkers, and quieter Mach-O/Firmware output.
2026-06-04 12:02:46 -06:00

64 lines
1.5 KiB
Go

package diff
import (
"github.com/blacktop/ipsw/pkg/info"
)
// ipswVolumeOrderMachos is the volume order the *InIPSW walkers enumerate:
// FileSystem, SystemOS, AppOS, ExclaveOS. machos/files/plists/localizations
// share it.
var ipswVolumeOrderMachos = []string{"fs", "sys", "app", "exc"}
type ipswVolumeFileSession interface {
Root(string) (string, error)
Release(string) error
}
// volumeResolves reports whether the IPSW has the given OS volume, matching the
// exact GetXOsDmg-guarded skips in ForEachMachoInIPSW (skip on ANY getter error;
// no sys->fs fallback, unlike mount.Session.Root("sys")).
func volumeResolves(inf *info.Info, typ string) bool {
if inf == nil {
return false
}
var err error
switch typ {
case "fs":
_, err = inf.GetFileSystemOsDmg()
case "sys":
_, err = inf.GetSystemOsDmg()
case "app":
_, err = inf.GetAppOsDmg()
case "exc":
_, err = inf.GetExclaveOSDmg()
default:
return false
}
return err == nil
}
// volumeLabel is the DMG label ForEachFileInIPSW emits (note the lowercase
// "filesystem"); used by parseFiles.
func volumeLabel(typ string) string {
switch typ {
case "fs":
return "filesystem"
case "sys":
return "SystemOS"
case "app":
return "AppOS"
case "exc":
return "ExclaveOS"
}
return typ
}
// volumeListDMGLabel is the DMG label search.ListDMGs uses (capital
// "FileSystem"); used by parseLocalizations, whose keys embed this name.
func volumeListDMGLabel(typ string) string {
if typ == "fs" {
return "FileSystem"
}
return volumeLabel(typ)
}