aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2026-07-01app: release 0.1.20.1.2Lena2-2/+7
versionCode 3. Drop --mkpath so remotes with an rsync older than 3.2.3 (stock macOS included) can receive syncs; rsync still creates the final remote path component on its own. NDK host toolchain detection so the native build also runs on macOS hosts.
2026-07-01native: pick the NDK host toolchain tag by build hostjsvk2-2/+26
The NDK names its prebuilt toolchain directory after the build host, not the target. Hardcoding linux-x86_64 broke rsync/build.sh and rsh/build.sh on macOS, which ships the toolchain under darwin-x86_64 (x86_64 binaries, run under Rosetta on Apple Silicon). Detect the host with uname and fail loud on anything else. Link: https://codeberg.org/0xlena/rsend/pulls/1
2026-07-01app: drop --mkpath for compatibility with old remote rsyncsLena3-6/+14
rsync forwards --mkpath to the remote side when sending, so a remote rsync older than 3.2.3 (notably stock macOS, whose openrsync is "rsync 2.6.9 compatible") rejects every sync with "unrecognized option '--mkpath'". rsync creates the final component of the destination path on its own, so flat remote paths keep working everywhere, including the documented rrsync setup whose root is pre-created. Only a nested remote path with missing parents now needs a one-time mkdir -p on the server; the log shows rsync's error when it is missing. Reported-by: jsvk Link: https://codeberg.org/0xlena/rsend/pulls/1
2026-07-01app: release 0.1.10.1.1Lena2-2/+6
versionCode 2. Empty-path and config-corruption fixes, rsync process cleanup on stopped syncs, keygen error reporting, and the store icon.
2026-07-01metadata: add the fastlane store iconLena1-0/+0
The app ships only an adaptive vector launcher icon, which F-Droid cannot render, so the store listing showed no icon. Ship a 512x512 raster of the same mark where F-Droid looks for it (fastlane images/ icon.png).
2026-07-01ci: remove unused testsshdLena3-162/+0
Nothing referenced it: the rsh tests run their own in-process SSH server (sshserver_test.go), which testsshd largely duplicated.
2026-07-01ci: make release.sh idempotentLena1-9/+24
Re-running on the same tag died creating a release that already existed. Reuse the tag's release when present, replace a stale asset before uploading, and parse API responses with python3 instead of sed.
2026-07-01ci: fail when gradle pins drift from versionsLena2-2/+18
The gradle files and go.mod repeat pins from versions because gradle cannot source a shell file. Compare them in ci/test.sh so a bump that misses a copy fails loud instead of silently building with the old version.
2026-07-01ci: pin the exact JDK releaseLena2-3/+6
The Adoptium "latest 17 GA" endpoint floats while versions promises never to float. Pin the full Temurin build and fetch it by version.
2026-07-01app: anchor the picker start path at the storage rootLena1-2/+6
The containment check was a bare prefix match, so a sibling such as /storage/emulated/0-evil passed for a root of /storage/emulated/0.
2026-07-01app: write config atomicallyLena1-1/+7
A crash mid-write corrupted config.json, and every later load then threw on parse, crash-looping the app until its data was cleared, losing the key and pinned host. Write to a temp file and rename.
2026-07-01app: kill rsync when a sync is stoppedLena2-4/+19
A stopped worker (schedule replaced, constraints lost) left rsync running detached until its own network timeout, including a window where a WiFi-only sync kept pushing on another network. A watchdog coroutine destroys the process on cancellation, which also closes its pipes and unblocks the log reader; the worker rethrows cancellation instead of logging it as a folder error.
2026-07-01app: refuse folder mappings with empty pathsLena2-4/+16
The trailing-slash fix-up turns an empty local path into /, so a blank folder row would rsync the entire filesystem; an empty remote path pushes into the rrsync root. Reject both when saving a folder, skip and log them at run time in case the config was edited by hand, and log why a sync was skipped when the app is not configured yet.
2026-07-01rsh: reject an invalid RSH_PORTLena1-8/+19
A garbage or out-of-range port silently fell back to 22 and connected to the wrong place; fail loud instead.
2026-07-01keys: never write the plaintext private key to diskLena4-42/+41
rsh -keygen printed the pubkey but wrote the key pair into a directory, so generating a key briefly left the plaintext private key on flash, contradicting the documented invariant that it only ever exists in memory. -keygen now emits the private key PEM on stdout and nothing else; the app encrypts it immediately and derives the public key via -pubkey, reusing the validated import path. Keygen failures now surface as an error dialog instead of crashing the app from a bare thread.
2026-06-01app: add a folder picker for local paths0.1.0Lena6-5/+223
Typing absolute paths is error-prone; let the user browse real filesystem folders and pick one. Stays on real paths (no SAF) so rsync keeps operating on POSIX paths.
2026-01-01rsend: push phone folders to a home SSH host over rsyncLena85-0/+4772
A small Android app for one-way folder backup, a KISS alternative to Syncthing. It bundles rsync (built from pinned source via the NDK) and a pure-Go SSH transport, both shipped in the APK as lib*.so and run from the native library directory. rsend pins the host key, stores the ed25519 identity Keystore-encrypted, pushes each folder additively or as a mirror, and runs on demand or on a WiFi-only schedule. The build is self-contained and reproducible: make setup provisions the toolchain, make builds rsync, rsh, and the APK.