# Repo topology + upstream sync procedure This repo is a fork of [`element-hq/element-x-android`](https://github.com/element-hq/element-x-android) with a native Cardano wallet module added. The history is structured so that staying current with upstream — and one day proposing our additions back — stays possible. ## Branches | Branch | Role | |--------|------| | `main` | Tracks the upstream commit we are currently based on. Fast-forwarded to `upstream/develop` when we deliberately pull in changes. Nothing coop-specific lives here. | | `wallet` | `main` + all our wallet work. This is what we build APKs from. Linear history on top of `main`; rebased whenever `main` moves. | | `archive/project-docs` | Frozen snapshot of the planning docs and screenshots that lived on the original orphan `main` branch. Not part of the active graph. | When we ever want a clean "everything we'd propose upstream" branch, we cherry-pick the wallet commits off `wallet` onto a fresh branch rooted at `main`. Because every current commit on `wallet` is wallet-module work, that split is simple. ## Remotes `origin` → this Gitea repo (LAN, via the Rackham SSH tunnel when working remotely). Add upstream on any local clone: ```bash git remote add upstream https://github.com/element-hq/element-x-android.git git fetch upstream ``` ## Sync with upstream When you want to pick up the latest from `element-hq/element-x-android`: ```bash # 1. Get the latest from upstream git fetch upstream # 2. Fast-forward main to upstream/develop git checkout main git merge --ff-only upstream/develop git push origin main # 3. Rebase wallet onto the new main git checkout wallet git rebase main # → resolve conflicts, one commit at a time # → conflict surface is small but real: our integration touches # libraries/matrix/{api,impl}, libraries/textcomposer/impl, # libraries/eventformatter/impl, libraries/mediaviewer/impl # 4. Build + test the APK before force-pushing ./gradlew :app:assembleFdroidDebug # or mainnet variant # 5. Push the rebased wallet branch (force-with-lease, not plain force) git push --force-with-lease origin wallet ``` If the rebase gets ugly, abort and try merging instead: ```bash git rebase --abort git merge upstream/develop # resolves in one shot, one merge commit, less clean history ``` ## Why not a Gitea mirror? Gitea only lets you configure a pull-mirror at repo-creation time, and mirroring a whole repo also means we can't commit to it. We want to keep our own commits, so upstream stays as a git remote you fetch from manually. ## License Upstream is **AGPL-3.0**. Every binary we hand out must be accompanied by the corresponding source under the same license. Keeping this Gitea repo accessible to recipients of the APK satisfies that. Don't ship binaries without also making the source reachable.