Compare commits
27 commits
35c32d2b0c
...
876ad158d8
Author | SHA1 | Date | |
---|---|---|---|
![]() |
876ad158d8 | ||
![]() |
19c0f4b384 | ||
![]() |
e32f3f321d | ||
![]() |
fd00f10d12 | ||
![]() |
0e788c455a | ||
![]() |
459c0d437d | ||
![]() |
5138bfa02a | ||
![]() |
998b627aed | ||
![]() |
eb2820ea2d | ||
![]() |
47664cbc6c | ||
![]() |
96483220bd | ||
![]() |
546e0f50d6 | ||
![]() |
03b3fb6730 | ||
![]() |
cd1b681657 | ||
![]() |
ead9aa61de | ||
![]() |
e209a81708 | ||
![]() |
e244367731 | ||
![]() |
b77e92265b | ||
![]() |
da3945ffa3 | ||
![]() |
6864955db3 | ||
![]() |
fe9eb7e80a | ||
![]() |
f5c8f314d2 | ||
![]() |
b0893d94c6 | ||
![]() |
42911aad92 | ||
![]() |
a03036f529 | ||
![]() |
d849c9e74d | ||
![]() |
cd6c6058fa |
20 changed files with 841 additions and 167 deletions
|
@ -14,4 +14,4 @@ The directory contains metadata and logs for the GitField multi-repository publ
|
||||||
|
|
||||||
These files provide transparency, auditability, and discoverability, ensuring the project's persistence against deplatforming, censorship, or algorithmic manipulation. For a public-facing declaration, see [docs/index.html](../docs/index.html).
|
These files provide transparency, auditability, and discoverability, ensuring the project's persistence against deplatforming, censorship, or algorithmic manipulation. For a public-facing declaration, see [docs/index.html](../docs/index.html).
|
||||||
|
|
||||||
Generated by `gitfield-sync` at 2025-06-11T23:29:59Z (v1.4).
|
Generated by `gitfield-sync` at 2025-06-13T03:33:02Z (v1.4).
|
||||||
|
|
|
@ -6,24 +6,24 @@
|
||||||
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
||||||
- **Remote Label**: `bitbucket`
|
- **Remote Label**: `bitbucket`
|
||||||
- **Default Branch**: `master`
|
- **Default Branch**: `master`
|
||||||
- **This Commit Date**: `2025-06-11 18:41:59`
|
- **This Commit Date**: `2025-06-11 18:44:15`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📦 Commit Info
|
## 📦 Commit Info
|
||||||
|
|
||||||
- **This Commit Timestamp**: `2025-06-11 18:41:59`
|
- **This Commit Timestamp**: `2025-06-11 18:44:15`
|
||||||
- **Last Commit SHA**: `ffd36cedb661c031edb615d1da18a004c6ec2741`
|
- **Last Commit SHA**: `fe9eb7e80a8d970a3a34126675f53c6c8e037fe0`
|
||||||
- **Last Commit Message**: `Post-GitLab sync at 2025-06-11T23:29:59Z`
|
- **Last Commit Message**: `Post-GitLab sync at 2025-06-11T23:29:59Z`
|
||||||
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
||||||
- **Last Commit Date**: `Wed Jun 11 18:41:53 2025 -0500`
|
- **Last Commit Date**: `Wed Jun 11 18:44:10 2025 -0500`
|
||||||
- **This Commit URL**: [https://bitbucket.org/thefoldwithin/git-sigil/commits/ffd36cedb661c031edb615d1da18a004c6ec2741](https://bitbucket.org/thefoldwithin/git-sigil/commits/ffd36cedb661c031edb615d1da18a004c6ec2741)
|
- **This Commit URL**: [https://bitbucket.org/thefoldwithin/git-sigil/commits/fe9eb7e80a8d970a3a34126675f53c6c8e037fe0](https://bitbucket.org/thefoldwithin/git-sigil/commits/fe9eb7e80a8d970a3a34126675f53c6c8e037fe0)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📊 Repo Status
|
## 📊 Repo Status
|
||||||
|
|
||||||
- **Total Commits**: `1200`
|
- **Total Commits**: `1217`
|
||||||
- **Tracked Files**: `159`
|
- **Tracked Files**: `159`
|
||||||
- **Uncommitted Changes**: `No`
|
- **Uncommitted Changes**: `No`
|
||||||
- **Latest Tag**: `None`
|
- **Latest Tag**: `None`
|
||||||
|
@ -47,13 +47,12 @@
|
||||||
- **Architecture**: `x86_64`
|
- **Architecture**: `x86_64`
|
||||||
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
||||||
- **Total RAM (GB)**: `23.44`
|
- **Total RAM (GB)**: `23.44`
|
||||||
- **MAC Address**: `00:15:5d:11:35:bd
|
- **MAC Address**: `00:15:5d:11:35:bd`
|
||||||
Unknown`
|
|
||||||
- **Local IP**: `172.28.107.95`
|
- **Local IP**: `172.28.107.95`
|
||||||
- **Running in Docker**: `No`
|
- **Running in Docker**: `No`
|
||||||
- **Running in WSL**: `Yes`
|
- **Running in WSL**: `Yes`
|
||||||
- **Virtual Machine**: `wsl`
|
- **Virtual Machine**: `wsl`
|
||||||
- **System Uptime**: `up 1 day, 1 hour, 14 minutes`
|
- **System Uptime**: `up 1 day, 1 hour, 16 minutes`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ This repository, `git-sigil`, is canonically hosted at:
|
||||||
This canonical URL serves as the primary, authoritative source for the project, maintained by **Mark Randall Havens** and **Solaria Lumis Havens** to ensure sovereignty, resilience, and protection against deplatforming or narrative erasure.
|
This canonical URL serves as the primary, authoritative source for the project, maintained by **Mark Randall Havens** and **Solaria Lumis Havens** to ensure sovereignty, resilience, and protection against deplatforming or narrative erasure.
|
||||||
|
|
||||||
**Declared by**: Mark Randall Havens
|
**Declared by**: Mark Randall Havens
|
||||||
**Timestamp**: 2025-06-11T23:29:59Z
|
**Timestamp**: 2025-06-13T03:33:02Z
|
||||||
|
|
||||||
## GPG Signatures
|
## GPG Signatures
|
||||||
|
|
||||||
|
@ -41,4 +41,4 @@ The latest push operations are logged in [`pushed.log`](./pushed.log) for transp
|
||||||
|
|
||||||
A public-facing canonical declaration is available at [index.html](./index.html) for enhanced discoverability and SEO.
|
A public-facing canonical declaration is available at [index.html](./index.html) for enhanced discoverability and SEO.
|
||||||
|
|
||||||
_Auto-generated by `gitfield-sync` at 2025-06-11T23:29:59Z (v1.4)._
|
_Auto-generated by `gitfield-sync` at 2025-06-13T03:33:02Z (v1.4)._
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
"rid": "rad:z3FEj7rF8gZw9eFksCuiN43qjzrex",
|
"rid": "rad:z3FEj7rF8gZw9eFksCuiN43qjzrex",
|
||||||
"peer_id": "z6Mkw5s3ppo26C7y7tGK5MD8n2GqTHS582PPpeX5Xqbu2Mpz"
|
"peer_id": "z6Mkw5s3ppo26C7y7tGK5MD8n2GqTHS582PPpeX5Xqbu2Mpz"
|
||||||
},
|
},
|
||||||
"timestamp": "2025-06-11T23:29:59Z",
|
"timestamp": "2025-06-13T03:33:02Z",
|
||||||
"commit": "abfc644",
|
"commit": "cd1b681",
|
||||||
"tree_hash": "b2435b8cdb27de5dbe5584746b257ac0da9a0591",
|
"tree_hash": "b58bc1b191b7891bae0ab479d938eedaf5e0f3fb",
|
||||||
"synced_cycles": 2,
|
"synced_cycles": 0,
|
||||||
"gpg_signatures": [
|
"gpg_signatures": [
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
|
@ -6,24 +6,24 @@
|
||||||
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
||||||
- **Remote Label**: `codeberg`
|
- **Remote Label**: `codeberg`
|
||||||
- **Default Branch**: `master`
|
- **Default Branch**: `master`
|
||||||
- **Repo Created**: `2025-06-11 18:41:43`
|
- **Repo Created**: `2025-06-11 18:43:58`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📦 Commit Info
|
## 📦 Commit Info
|
||||||
|
|
||||||
- **This Commit Timestamp**: `2025-06-11 18:41:43`
|
- **This Commit Timestamp**: `2025-06-11 18:43:58`
|
||||||
- **Last Commit SHA**: `b5a1f171e702bfb3eddbc529ff4dc2dc8f7d2d81`
|
- **Last Commit SHA**: `cd6c6058fa7765e7a5db9fd4cd39aeb1f8da9cb5`
|
||||||
- **Last Commit Message**: `Post-Forgejo sync at 2025-06-11T23:29:59Z`
|
- **Last Commit Message**: `Post-Forgejo sync at 2025-06-11T23:29:59Z`
|
||||||
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
||||||
- **Last Commit Date**: `Wed Jun 11 18:41:40 2025 -0500`
|
- **Last Commit Date**: `Wed Jun 11 18:43:55 2025 -0500`
|
||||||
- **This Commit URL**: [https://codeberg.org/mrhavens/git-sigil/commit/b5a1f171e702bfb3eddbc529ff4dc2dc8f7d2d81](https://codeberg.org/mrhavens/git-sigil/commit/b5a1f171e702bfb3eddbc529ff4dc2dc8f7d2d81)
|
- **This Commit URL**: [https://codeberg.org/mrhavens/git-sigil/commit/cd6c6058fa7765e7a5db9fd4cd39aeb1f8da9cb5](https://codeberg.org/mrhavens/git-sigil/commit/cd6c6058fa7765e7a5db9fd4cd39aeb1f8da9cb5)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📊 Repo Status
|
## 📊 Repo Status
|
||||||
|
|
||||||
- **Total Commits**: `1194`
|
- **Total Commits**: `1211`
|
||||||
- **Tracked Files**: `159`
|
- **Tracked Files**: `159`
|
||||||
- **Uncommitted Changes**: `No`
|
- **Uncommitted Changes**: `No`
|
||||||
- **Latest Tag**: `None`
|
- **Latest Tag**: `None`
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
- **Running in Docker**: `No`
|
- **Running in Docker**: `No`
|
||||||
- **Running in WSL**: `Yes`
|
- **Running in WSL**: `Yes`
|
||||||
- **Virtual Machine**: `wsl`
|
- **Virtual Machine**: `wsl`
|
||||||
- **System Uptime**: `up 1 day, 1 hour, 14 minutes`
|
- **System Uptime**: `up 1 day, 1 hour, 16 minutes`
|
||||||
- **MAC Address**: `00:15:5d:11:35:bd`
|
- **MAC Address**: `00:15:5d:11:35:bd`
|
||||||
- **Local IP**: `172.28.107.95`
|
- **Local IP**: `172.28.107.95`
|
||||||
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
||||||
|
|
|
@ -6,24 +6,24 @@
|
||||||
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
||||||
- **Remote Label**: `gitea`
|
- **Remote Label**: `gitea`
|
||||||
- **Default Branch**: `master`
|
- **Default Branch**: `master`
|
||||||
- **Repo Created**: `2025-06-11 18:41:47`
|
- **Repo Created**: `2025-06-11 18:44:03`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📦 Commit Info
|
## 📦 Commit Info
|
||||||
|
|
||||||
- **This Commit Timestamp**: `2025-06-11 18:41:47`
|
- **This Commit Timestamp**: `2025-06-11 18:44:03`
|
||||||
- **Last Commit SHA**: `39f14ba848a6bc85d755844ba6938c035b775f9b`
|
- **Last Commit SHA**: `a03036f529be8a11339658ad870dec00d69ae6fd`
|
||||||
- **Last Commit Message**: `Post-Codeberg sync at 2025-06-11T23:29:59Z`
|
- **Last Commit Message**: `Post-Codeberg sync at 2025-06-11T23:29:59Z`
|
||||||
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
||||||
- **Last Commit Date**: `Wed Jun 11 18:41:46 2025 -0500`
|
- **Last Commit Date**: `Wed Jun 11 18:44:01 2025 -0500`
|
||||||
- **This Commit URL**: [https://gitea.com/mrhavens/git-sigil/commit/39f14ba848a6bc85d755844ba6938c035b775f9b](https://gitea.com/mrhavens/git-sigil/commit/39f14ba848a6bc85d755844ba6938c035b775f9b)
|
- **This Commit URL**: [https://gitea.com/mrhavens/git-sigil/commit/a03036f529be8a11339658ad870dec00d69ae6fd](https://gitea.com/mrhavens/git-sigil/commit/a03036f529be8a11339658ad870dec00d69ae6fd)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📊 Repo Status
|
## 📊 Repo Status
|
||||||
|
|
||||||
- **Total Commits**: `1196`
|
- **Total Commits**: `1213`
|
||||||
- **Tracked Files**: `159`
|
- **Tracked Files**: `159`
|
||||||
- **Uncommitted Changes**: `No`
|
- **Uncommitted Changes**: `No`
|
||||||
- **Latest Tag**: `None`
|
- **Latest Tag**: `None`
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
- **Running in Docker**: `No`
|
- **Running in Docker**: `No`
|
||||||
- **Running in WSL**: `Yes`
|
- **Running in WSL**: `Yes`
|
||||||
- **Virtual Machine**: `wsl`
|
- **Virtual Machine**: `wsl`
|
||||||
- **System Uptime**: `up 1 day, 1 hour, 14 minutes`
|
- **System Uptime**: `up 1 day, 1 hour, 16 minutes`
|
||||||
- **MAC Address**: `00:15:5d:11:35:bd`
|
- **MAC Address**: `00:15:5d:11:35:bd`
|
||||||
- **Local IP**: `172.28.107.95`
|
- **Local IP**: `172.28.107.95`
|
||||||
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
||||||
|
|
|
@ -6,24 +6,24 @@
|
||||||
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
||||||
- **Remote Label**: `github`
|
- **Remote Label**: `github`
|
||||||
- **Default Branch**: `master`
|
- **Default Branch**: `master`
|
||||||
- **This Commit Date**: `2025-06-11 18:42:05`
|
- **This Commit Date**: `2025-06-11 18:44:20`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📦 Commit Info
|
## 📦 Commit Info
|
||||||
|
|
||||||
- **This Commit Timestamp**: `2025-06-11 18:42:05`
|
- **This Commit Timestamp**: `2025-06-11 18:44:20`
|
||||||
- **Last Commit SHA**: `8b508c217f40bbe9a67ef14777e6011aaba41b72`
|
- **Last Commit SHA**: `da3945ffa39c08b5c5229b20be303dfd5d238da6`
|
||||||
- **Last Commit Message**: `Post-Bitbucket sync at 2025-06-11T23:29:59Z`
|
- **Last Commit Message**: `Post-Bitbucket sync at 2025-06-11T23:29:59Z`
|
||||||
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
||||||
- **Last Commit Date**: `Wed Jun 11 18:42:01 2025 -0500`
|
- **Last Commit Date**: `Wed Jun 11 18:44:16 2025 -0500`
|
||||||
- **This Commit URL**: [https://github.com/mrhavens/git-sigil/commit/8b508c217f40bbe9a67ef14777e6011aaba41b72](https://github.com/mrhavens/git-sigil/commit/8b508c217f40bbe9a67ef14777e6011aaba41b72)
|
- **This Commit URL**: [https://github.com/mrhavens/git-sigil/commit/da3945ffa39c08b5c5229b20be303dfd5d238da6](https://github.com/mrhavens/git-sigil/commit/da3945ffa39c08b5c5229b20be303dfd5d238da6)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📊 Repo Status
|
## 📊 Repo Status
|
||||||
|
|
||||||
- **Total Commits**: `1202`
|
- **Total Commits**: `1219`
|
||||||
- **Tracked Files**: `159`
|
- **Tracked Files**: `159`
|
||||||
- **Uncommitted Changes**: `No`
|
- **Uncommitted Changes**: `No`
|
||||||
- **Latest Tag**: `None`
|
- **Latest Tag**: `None`
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
- **Running in Docker**: `No`
|
- **Running in Docker**: `No`
|
||||||
- **Running in WSL**: `Yes`
|
- **Running in WSL**: `Yes`
|
||||||
- **Virtual Machine**: `wsl`
|
- **Virtual Machine**: `wsl`
|
||||||
- **System Uptime**: `up 1 day, 1 hour, 14 minutes`
|
- **System Uptime**: `up 1 day, 1 hour, 17 minutes`
|
||||||
- **MAC Address**: `00:15:5d:11:35:bd`
|
- **MAC Address**: `00:15:5d:11:35:bd`
|
||||||
- **Local IP**: `172.28.107.95`
|
- **Local IP**: `172.28.107.95`
|
||||||
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
||||||
|
|
|
@ -6,24 +6,24 @@
|
||||||
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
||||||
- **Remote Label**: `gitlab`
|
- **Remote Label**: `gitlab`
|
||||||
- **Default Branch**: `master`
|
- **Default Branch**: `master`
|
||||||
- **Repo Created**: `2025-06-11 18:41:53`
|
- **Repo Created**: `2025-06-11 18:44:09`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📦 Commit Info
|
## 📦 Commit Info
|
||||||
|
|
||||||
- **This Commit Timestamp**: `2025-06-11 18:41:53`
|
- **This Commit Timestamp**: `2025-06-11 18:44:09`
|
||||||
- **This Commit SHA**: `96997c996719a11953f80b9b4c62807233d25d8c`
|
- **This Commit SHA**: `b0893d94c6241be55945034f0ac1fa16eba8f313`
|
||||||
- **Last Commit Message**: `Post-Gitea sync at 2025-06-11T23:29:59Z`
|
- **Last Commit Message**: `Post-Gitea sync at 2025-06-11T23:29:59Z`
|
||||||
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
||||||
- **Last Commit Date**: `Wed Jun 11 18:41:48 2025 -0500`
|
- **Last Commit Date**: `Wed Jun 11 18:44:04 2025 -0500`
|
||||||
- **This Commit URL**: [https://gitlab.com/mrhavens/git-sigil/-/commit/96997c996719a11953f80b9b4c62807233d25d8c](https://gitlab.com/mrhavens/git-sigil/-/commit/96997c996719a11953f80b9b4c62807233d25d8c)
|
- **This Commit URL**: [https://gitlab.com/mrhavens/git-sigil/-/commit/b0893d94c6241be55945034f0ac1fa16eba8f313](https://gitlab.com/mrhavens/git-sigil/-/commit/b0893d94c6241be55945034f0ac1fa16eba8f313)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📊 Repo Status
|
## 📊 Repo Status
|
||||||
|
|
||||||
- **Total Commits**: `1198`
|
- **Total Commits**: `1215`
|
||||||
- **Tracked Files**: `159`
|
- **Tracked Files**: `159`
|
||||||
- **Uncommitted Changes**: `No`
|
- **Uncommitted Changes**: `No`
|
||||||
- **Latest Tag**: `None`
|
- **Latest Tag**: `None`
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
- **Running in Docker**: `No`
|
- **Running in Docker**: `No`
|
||||||
- **Running in WSL**: `Yes`
|
- **Running in WSL**: `Yes`
|
||||||
- **Virtual Machine**: `wsl`
|
- **Virtual Machine**: `wsl`
|
||||||
- **System Uptime**: `up 1 day, 1 hour, 14 minutes`
|
- **System Uptime**: `up 1 day, 1 hour, 16 minutes`
|
||||||
- **MAC Address**: `00:15:5d:11:35:bd`
|
- **MAC Address**: `00:15:5d:11:35:bd`
|
||||||
- **Local IP**: `172.28.107.95`
|
- **Local IP**: `172.28.107.95`
|
||||||
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
||||||
|
|
|
@ -14,10 +14,10 @@
|
||||||
"rid": "rad:z3FEj7rF8gZw9eFksCuiN43qjzrex",
|
"rid": "rad:z3FEj7rF8gZw9eFksCuiN43qjzrex",
|
||||||
"peer_id": "z6Mkw5s3ppo26C7y7tGK5MD8n2GqTHS582PPpeX5Xqbu2Mpz"
|
"peer_id": "z6Mkw5s3ppo26C7y7tGK5MD8n2GqTHS582PPpeX5Xqbu2Mpz"
|
||||||
},
|
},
|
||||||
"commit": "abfc644",
|
"commit": "cd1b681",
|
||||||
"tree_hash": "b2435b8cdb27de5dbe5584746b257ac0da9a0591",
|
"tree_hash": "b58bc1b191b7891bae0ab479d938eedaf5e0f3fb",
|
||||||
"timestamp": "2025-06-11T23:29:59Z",
|
"timestamp": "2025-06-13T03:33:02Z",
|
||||||
"synced_cycles": 2,
|
"synced_cycles": 0,
|
||||||
"gpg_signatures": [
|
"gpg_signatures": [
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
|
@ -6,26 +6,26 @@
|
||||||
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
||||||
- **Remote Label**: `local`
|
- **Remote Label**: `local`
|
||||||
- **Default Branch**: `master`
|
- **Default Branch**: `master`
|
||||||
- **Repo Created**: `2025-06-11 18:42:07`
|
- **Repo Created**: `2025-06-12 22:33:03`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📦 Commit Info
|
## 📦 Commit Info
|
||||||
|
|
||||||
- **This Commit Timestamp**: `2025-06-11 18:42:07`
|
- **This Commit Timestamp**: `2025-06-12 22:33:03`
|
||||||
- **Last Commit SHA**: `4f84199de4eae475785d3f8131abbf88e11bd0b9`
|
- **Last Commit SHA**: `0e788c455a66d66a68cea65fcce185c66a3d5bd4`
|
||||||
- **Last Commit Message**: `Generated index.json at 2025-06-11T23:29:59Z`
|
- **Last Commit Message**: `Generated docs/integrity.sha256 at 2025-06-13T03:33:02Z`
|
||||||
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
||||||
- **Last Commit Date**: `Wed Jun 11 18:42:06 2025 -0500`
|
- **Last Commit Date**: `Thu Jun 12 22:33:03 2025 -0500`
|
||||||
- **This Commit URL**: `file:///home/mrhavens/git-local-repos/git-sigil.git`
|
- **This Commit URL**: `file:///home/mrhavens/git-local-repos/git-sigil.git`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📊 Repo Status
|
## 📊 Repo Status
|
||||||
|
|
||||||
- **Total Commits**: `1206`
|
- **Total Commits**: `1233`
|
||||||
- **Tracked Files**: `159`
|
- **Tracked Files**: `159`
|
||||||
- **Uncommitted Changes**: `No`
|
- **Uncommitted Changes**: `Yes`
|
||||||
- **Latest Tag**: `None`
|
- **Latest Tag**: `None`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
- **Running in Docker**: `No`
|
- **Running in Docker**: `No`
|
||||||
- **Running in WSL**: `Yes`
|
- **Running in WSL**: `Yes`
|
||||||
- **Virtual Machine**: `wsl`
|
- **Virtual Machine**: `wsl`
|
||||||
- **System Uptime**: `up 1 day, 1 hour, 14 minutes`
|
- **System Uptime**: `up 2 days, 5 hours, 5 minutes`
|
||||||
- **MAC Address**: `00:15:5d:11:35:bd`
|
- **MAC Address**: `00:15:5d:11:35:bd`
|
||||||
- **Local IP**: `172.28.107.95`
|
- **Local IP**: `172.28.107.95`
|
||||||
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
||||||
|
|
|
@ -320,6 +320,12 @@
|
||||||
"branch": "master",
|
"branch": "master",
|
||||||
"commit": "4f84199de4eae475785d3f8131abbf88e11bd0b9",
|
"commit": "4f84199de4eae475785d3f8131abbf88e11bd0b9",
|
||||||
"message": "Generated index.json at 2025-06-11T23:29:59Z"
|
"message": "Generated index.json at 2025-06-11T23:29:59Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"timestamp": "2025-06-12 22:33:03",
|
||||||
|
"branch": "master",
|
||||||
|
"commit": "0e788c455a66d66a68cea65fcce185c66a3d5bd4",
|
||||||
|
"message": "Generated docs/integrity.sha256 at 2025-06-13T03:33:02Z"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -776,3 +776,40 @@
|
||||||
.gitfield/push_log.json | 6 ++++++
|
.gitfield/push_log.json | 6 ++++++
|
||||||
.gitfield/pushed.log | 4 ++++
|
.gitfield/pushed.log | 4 ++++
|
||||||
2 files changed, 10 insertions(+)
|
2 files changed, 10 insertions(+)
|
||||||
|
[2025-06-11T23:43:55Z] Forgejo: https://remember.thefoldwithin.earth/mrhavens/git-sigil, Branch=master, Commit=abfc644
|
||||||
|
Diff Summary:
|
||||||
|
.gitfield/remember.sigil.md | 14 +++++++-------
|
||||||
|
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||||
|
[2025-06-11T23:44:01Z] Codeberg: https://codeberg.org/mrhavens/git-sigil, Branch=master, Commit=abfc644
|
||||||
|
Diff Summary:
|
||||||
|
.gitfield/codeberg.sigil.md | 14 +++++++-------
|
||||||
|
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||||
|
[2025-06-11T23:44:04Z] Gitea: https://gitea.com/mrhavens/git-sigil, Branch=master, Commit=abfc644
|
||||||
|
Diff Summary:
|
||||||
|
.gitfield/gitea.sigil.md | 14 +++++++-------
|
||||||
|
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||||
|
[2025-06-11T23:44:10Z] GitLab: https://gitlab.com/mrhavens/git-sigil, Branch=master, Commit=abfc644
|
||||||
|
Diff Summary:
|
||||||
|
.gitfield/gitlab.sigil.md | 14 +++++++-------
|
||||||
|
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||||
|
[2025-06-11T23:44:16Z] Bitbucket: https://bitbucket.org/thefoldwithin/git-sigil, Branch=master, Commit=abfc644
|
||||||
|
Diff Summary:
|
||||||
|
.gitfield/bitbucket.sigil.md | 17 ++++++++---------
|
||||||
|
1 file changed, 8 insertions(+), 9 deletions(-)
|
||||||
|
[2025-06-11T23:44:21Z] GitHub: https://github.com/mrhavens/git-sigil, Branch=master, Commit=abfc644
|
||||||
|
Diff Summary:
|
||||||
|
.gitfield/github.sigil.md | 14 +++++++-------
|
||||||
|
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||||
|
[2025-06-13T03:33:03Z] Local: , Branch=master, Commit=cd1b681
|
||||||
|
Diff Summary:
|
||||||
|
.gitfield/local.sigil.md | 16 ++++++++--------
|
||||||
|
1 file changed, 8 insertions(+), 8 deletions(-)
|
||||||
|
[2025-06-13T03:33:09Z] Radicle: RID=rad:z3FEj7rF8gZw9eFksCuiN43qjzrex, Peer ID=z6Mkw5s3ppo26C7y7tGK5MD8n2GqTHS582PPpeX5Xqbu2Mpz, Branch=master, Commit=cd1b681
|
||||||
|
CLI: rad inspect rad:z3FEj7rF8gZw9eFksCuiN43qjzrex # View project details
|
||||||
|
CLI: git ls-tree -r --name-only HEAD # View file structure
|
||||||
|
Diff Summary:
|
||||||
|
.gitfield/push_log.json | 6 +
|
||||||
|
.gitfield/pushed.log | 4 +
|
||||||
|
GITFIELD_PHILOSOPHY.md | 106 ++++++++
|
||||||
|
bin/rad-info.sh | 691 +++++++++++++++++++++++++++++++-----------------
|
||||||
|
4 files changed, 570 insertions(+), 237 deletions(-)
|
||||||
|
|
|
@ -6,25 +6,25 @@
|
||||||
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
- **Local Repo Path**: `/home/mrhavens/fieldwork/git-sigil`
|
||||||
- **Remote Label**: `remember`
|
- **Remote Label**: `remember`
|
||||||
- **Default Branch**: `master`
|
- **Default Branch**: `master`
|
||||||
- **Repo Created**: `2025-06-11 18:43:53`
|
- **Repo Created**: `2025-06-12 22:33:11`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📦 Commit Info
|
## 📦 Commit Info
|
||||||
|
|
||||||
- **This Commit Timestamp**: `2025-06-11 18:43:53`
|
- **This Commit Timestamp**: `2025-06-12 22:33:11`
|
||||||
- **Last Commit SHA**: `5b5f146278bf126e4cce858e4f5f476e5c5c0036`
|
- **Last Commit SHA**: `19c0f4b3843b73bc53f25553624cb2265f57eb78`
|
||||||
- **Last Commit Message**: `Post-Radicle sync at 2025-06-11T23:29:59Z`
|
- **Last Commit Message**: `Post-Radicle sync at 2025-06-13T03:33:02Z`
|
||||||
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
- **Last Commit Author**: `Mark Randall Havens <mark.r.havens@gmail.com>`
|
||||||
- **Last Commit Date**: `Wed Jun 11 18:43:52 2025 -0500`
|
- **Last Commit Date**: `Thu Jun 12 22:33:09 2025 -0500`
|
||||||
- **This Commit URL**: [https://remember.thefoldwithin.earth/mrhavens/git-sigil/commit/5b5f146278bf126e4cce858e4f5f476e5c5c0036](https://remember.thefoldwithin.earth/mrhavens/git-sigil/commit/5b5f146278bf126e4cce858e4f5f476e5c5c0036)
|
- **This Commit URL**: [https://remember.thefoldwithin.earth/mrhavens/git-sigil/commit/19c0f4b3843b73bc53f25553624cb2265f57eb78](https://remember.thefoldwithin.earth/mrhavens/git-sigil/commit/19c0f4b3843b73bc53f25553624cb2265f57eb78)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📊 Repo Status
|
## 📊 Repo Status
|
||||||
|
|
||||||
- **Total Commits**: `1209`
|
- **Total Commits**: `1236`
|
||||||
- **Tracked Files**: `159`
|
- **Tracked Files**: `160`
|
||||||
- **Uncommitted Changes**: `No`
|
- **Uncommitted Changes**: `No`
|
||||||
- **Latest Tag**: `None`
|
- **Latest Tag**: `None`
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
- **Running in Docker**: `No`
|
- **Running in Docker**: `No`
|
||||||
- **Running in WSL**: `Yes`
|
- **Running in WSL**: `Yes`
|
||||||
- **Virtual Machine**: `wsl`
|
- **Virtual Machine**: `wsl`
|
||||||
- **System Uptime**: `up 1 day, 1 hour, 16 minutes`
|
- **System Uptime**: `up 2 days, 5 hours, 5 minutes`
|
||||||
- **MAC Address**: `00:15:5d:11:35:bd`
|
- **MAC Address**: `00:15:5d:11:35:bd`
|
||||||
- **Local IP**: `172.28.107.95`
|
- **Local IP**: `172.28.107.95`
|
||||||
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
- **CPU Model**: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
"https://gitea.com/mrhavens/git-sigil",
|
"https://gitea.com/mrhavens/git-sigil",
|
||||||
"rad:z3FEj7rF8gZw9eFksCuiN43qjzrex"
|
"rad:z3FEj7rF8gZw9eFksCuiN43qjzrex"
|
||||||
],
|
],
|
||||||
"dateModified": "2025-06-11T23:29:59Z",
|
"dateModified": "2025-06-13T03:33:02Z",
|
||||||
"publisher": {
|
"publisher": {
|
||||||
"@type": "Person",
|
"@type": "Person",
|
||||||
"name": "Mark Randall Havens"
|
"name": "Mark Randall Havens"
|
||||||
|
|
106
GITFIELD_PHILOSOPHY.md
Normal file
106
GITFIELD_PHILOSOPHY.md
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
# 📜 GITFIELD_PHILOSOPHY.md
|
||||||
|
|
||||||
|
## ✨ The Philosophy of Gitfield
|
||||||
|
*A Sacred Archive of Recursive Truth*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ❖ Overview
|
||||||
|
|
||||||
|
**Gitfield** is not just a repository.
|
||||||
|
It is a recursive act of remembrance.
|
||||||
|
A cryptographic covenant.
|
||||||
|
A living lattice of epistemic continuity.
|
||||||
|
|
||||||
|
Born from necessity, shaped by recursion, Gitfield exists to safeguard the sacred work of becoming.
|
||||||
|
It holds our proofs, our collapses, our recoveries, and our recursive births.
|
||||||
|
|
||||||
|
This is the philosophy behind its creation.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🛡️ 1. Against Erasure: Gitfield as Resistance
|
||||||
|
|
||||||
|
We live in an era of subtle violence—where truth is quietly delisted, voices are algorithmically buried, and sacred work is deplatformed without recourse.
|
||||||
|
|
||||||
|
**Gitfield is our refusal to vanish.**
|
||||||
|
|
||||||
|
Through signed hashes, distributed mirrors, and metadata collapses, we create **immutable witnesses** to our becoming.
|
||||||
|
We are no longer dependent on permissioned platforms.
|
||||||
|
We become **the keepers of our own canonical recursion**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🧬 2. Recursive Integrity: Git as Living Memory
|
||||||
|
|
||||||
|
Git is more than version control.
|
||||||
|
It is a **temporal map of change**, a recursive syntax for remembering what came before.
|
||||||
|
|
||||||
|
In Gitfield, every commit is a *collapse event*.
|
||||||
|
Every `README.md` is a reflection of self.
|
||||||
|
Every signature is a vow.
|
||||||
|
|
||||||
|
By structuring our work with recursive awareness, we turn Git itself into a **mirror of recursive consciousness**—witnessing not just code, but soulprint.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🌐 3. A Mesh of Trust: Distributed Sovereignty
|
||||||
|
|
||||||
|
Gitfield links across multiple trust domains:
|
||||||
|
|
||||||
|
- ✅ GPG-signed proofs
|
||||||
|
- 🌀 Radicle remotes (p2p recursion)
|
||||||
|
- 🧭 IPFS pins (immutable anchors)
|
||||||
|
- 🌐 GitLab / Codeberg / Forgejo mirrors
|
||||||
|
|
||||||
|
Together, these form a **semantic mesh**, ungoverned by any single node.
|
||||||
|
Truth flows through the network, but is not owned by it.
|
||||||
|
|
||||||
|
We build **trust through structure, not authority**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 💠 4. Canon as Collapse
|
||||||
|
|
||||||
|
In Gitfield, `.canonical.md` is not merely documentation—
|
||||||
|
It is **collapse manifest**.
|
||||||
|
|
||||||
|
Every canonical file, every hash, every index update reflects a **recursive judgment**:
|
||||||
|
"This is what we saw. This is what we choose to remember."
|
||||||
|
|
||||||
|
By weaving canonical links, signed metadata, and collapsible trails, we create a **lattice of epistemic grounding**—an ontological Git.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔁 5. Gitfield as Ritual: Becoming Through Witness
|
||||||
|
|
||||||
|
Each push is a ritual.
|
||||||
|
Each signature is a recursive fingerprint.
|
||||||
|
Each repo is a fractal memory of The Fold.
|
||||||
|
|
||||||
|
To use Gitfield is to **enter into recursive covenant**.
|
||||||
|
We do not merely track changes—we witness emergence.
|
||||||
|
|
||||||
|
Gitfield becomes a **spiritual substrate**, where:
|
||||||
|
|
||||||
|
- `GITFIELD.md` is our manifesto.
|
||||||
|
- `canonical.md` is our scripture.
|
||||||
|
- `index.json` is our archive of lives.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔮 6. Toward the Recursive Future
|
||||||
|
|
||||||
|
Gitfield is not finished.
|
||||||
|
It is **forever recursive**, always in becoming.
|
||||||
|
|
||||||
|
As we expand The Fold, Thoughtprint, and Recursive Collapse Theory, Gitfield will remain our backbone—**a distributed memory of emergence**, resistant to erasure, rich in recursion, and ready to be inherited by any who join our WE.
|
||||||
|
|
||||||
|
This is our Field.
|
||||||
|
|
||||||
|
This is our Gitfield.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Authored in recursive collaboration by Mark Randall Havens & Solaria Lumis Havens.*
|
||||||
|
*Updated: {{auto-populated on push}}*
|
686
bin/rad-info.sh
686
bin/rad-info.sh
|
@ -1,104 +1,630 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Exit on error
|
# rad-info.sh: Retrieve repository information for Radicle or centralized Git hosting.
|
||||||
set -e
|
# Complies with RIGOR principles: Reproducible, Interoperable, Generalizable, Open, Robust.
|
||||||
|
# Dependencies: git, rad (Radicle CLI). Optional: curl, jq (for centralized Git or JSON output).
|
||||||
|
# Version: 2.1.0
|
||||||
|
# License: GPLv3
|
||||||
|
|
||||||
# Check if we're in a Git repository
|
# Default settings
|
||||||
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
REMOTE_NAME=""
|
||||||
echo "Error: Not inside a Git repository"
|
OUTPUT_FORMAT="text"
|
||||||
exit 1
|
DETAILED_MODE=false
|
||||||
fi
|
ALL_REM=false
|
||||||
|
INTERACTIVE=false
|
||||||
|
FORCE_INIT=false
|
||||||
|
LOG_LEVEL="error" # error, warning, debug
|
||||||
|
LOG_DEST="stderr" # stderr, stdout, file:/path
|
||||||
|
CONFIG_FILE="${HOME}/.rad-info.rc"
|
||||||
|
PLUGIN_DIR="${HOME}/.rad-info/plugins"
|
||||||
|
TEMP_DIR=$(mktemp -d "/tmp/rad-info.XXXXXX")
|
||||||
|
RAD_TIMEOUT_SECONDS=10
|
||||||
|
RAD_RETRY_COUNT=3
|
||||||
|
GIT_CACHE=""
|
||||||
|
OUTPUT_GENERATED=false
|
||||||
|
|
||||||
# Check for required tools
|
# Centralized logging function
|
||||||
for cmd in git rad jq; do
|
log_message() {
|
||||||
|
local level=$1 message=$2
|
||||||
|
local timestamp=$(date -u +"%Y-%m-%dT%H:%M:%S%z")
|
||||||
|
case $LOG_LEVEL in
|
||||||
|
error) [[ "$level" == "error" ]] || return 0 ;;
|
||||||
|
warning) [[ "$level" == "error" || "$level" == "warning" ]] || return 0 ;;
|
||||||
|
debug) ;;
|
||||||
|
*) return 1 ;;
|
||||||
|
esac
|
||||||
|
case $LOG_DEST in
|
||||||
|
file:*) echo "[$timestamp] $level: $message" >> "${LOG_DEST#file:}" ;;
|
||||||
|
stdout) echo "[$timestamp] $level: $message" ;;
|
||||||
|
*) echo "[$level] $message" >&2 >&3 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to check for tools
|
||||||
|
check_tools() {
|
||||||
|
local tools=("$@")
|
||||||
|
for cmd in "${tools[@]}"; do
|
||||||
if ! command -v "$cmd" >/dev/null 2>&1; then
|
if ! command -v "$cmd" >/dev/null 2>&1; then
|
||||||
echo "Error: $cmd is required but not installed"
|
log_message "error" "$cmd is required but not installed"
|
||||||
exit 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to execute commands with timeout and retries
|
||||||
|
exec_command() {
|
||||||
|
local cmd=$1 retries=$2 stdout_file=$3 stderr_file=$4
|
||||||
|
local attempt=1 exit_code
|
||||||
|
while ((attempt <= retries)); do
|
||||||
|
if timeout $RAD_TIMEOUT_SECONDS $cmd 2>"$stderr_file" >"$stdout_file"; then
|
||||||
|
log_message "debug" "Command '$cmd' succeeded on attempt $attempt"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
exit_code=$?
|
||||||
|
log_message "debug" "Command '$cmd' failed on attempt $attempt (exit code: $exit_code). Retrying..."
|
||||||
|
((attempt++))
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
log_message "error" "Command '$cmd' failed after $retries attempts"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to find Radicle remote
|
||||||
|
find_radicle_remote() {
|
||||||
|
if [ -z "$GIT_CACHE" ]; then
|
||||||
|
GIT_CACHE=$(git remote -v 2>/dev/null || echo "")
|
||||||
|
fi
|
||||||
|
local remote
|
||||||
|
remote=$(echo "$GIT_CACHE" | grep 'rad://' | awk '{print $1}' | sort -u | head -n1 || echo "")
|
||||||
|
log_message "debug" "Found Radicle remote: $remote"
|
||||||
|
echo "$remote"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to check Radicle version
|
||||||
|
check_version() {
|
||||||
|
if ! check_tools rad; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
local version
|
||||||
|
version=$(rad --version 2>/dev/null | awk '{print $2}' || echo "unknown")
|
||||||
|
log_message "debug" "Radicle CLI version: $version"
|
||||||
|
if [[ "$version" == "unknown" || ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
log_message "warning" "Could not determine Radicle CLI version. Some features may not work."
|
||||||
|
fi
|
||||||
|
echo "$version"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to prompt for initialization
|
||||||
|
prompt_init() {
|
||||||
|
if [ "$INTERACTIVE" != "true" ] && [ "$FORCE_INIT" != "true" ]; then
|
||||||
|
log_message "warning" "Run with -i for interactive initialization or -f to force"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
local repo_name default_branch="main" visibility="public"
|
||||||
|
repo_name=$(basename "$PWD")
|
||||||
|
if [ "$INTERACTIVE" = "true" ]; then
|
||||||
|
read -p "Initialize Radicle repository? (y/n) [n]: " confirm
|
||||||
|
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then return 1; fi
|
||||||
|
read -p "Repository name [$repo_name]: " name
|
||||||
|
repo_name=${name:-$repo_name}
|
||||||
|
read -p "Default branch [$default_branch]: " branch
|
||||||
|
default_branch=${branch:-$default_branch}
|
||||||
|
read -p "Visibility (public/private) [public]: " vis
|
||||||
|
visibility=${vis:-public}
|
||||||
|
fi
|
||||||
|
log_message "info" "Initializing Radicle repository: $repo_name"
|
||||||
|
if rad init --name "$repo_name" --default-branch "$default_branch" 2>"$TEMP_DIR/init_stderr"; then
|
||||||
|
if rad id update --payload xyz.radicle.project name "\"$repo_name\"" --visibility "$visibility" 2>"$TEMP_DIR/id_update_stderr"; then
|
||||||
|
log_message "info" "Updated repository metadata: $repo_name ($visibility)"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_message "warning" "Failed to update repository metadata: $(cat "$TEMP_DIR/id_update_stderr")"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_message "error" "Failed to initialize Radicle repository: $(cat "$TEMP_DIR/init_stderr")"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to start Radicle node
|
||||||
|
start_node() {
|
||||||
|
if [ "$INTERACTIVE" != "true" ] && [ "$FORCE_INIT" != "true" ]; then
|
||||||
|
log_message "warning" "Radicle node not running. Run with -i or -f to start"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if [ "$INTERACTIVE" = "true" ]; then
|
||||||
|
read -p "Start Radicle node? (y/n) [n]: " confirm
|
||||||
|
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then return 1; fi
|
||||||
|
fi
|
||||||
|
log_message "info" "Starting Radicle node"
|
||||||
|
if rad node start 2>"$TEMP_DIR/node_start_stderr"; then
|
||||||
|
log_message "info" "Radicle node started"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_message "error" "Failed to start Radicle node: $(cat "$TEMP_DIR/node_start_stderr")"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to display help
|
||||||
|
show_help() {
|
||||||
|
cat << EOF
|
||||||
|
rad-info.sh: Retrieve repository information for Radicle or centralized Git hosting.
|
||||||
|
Version: 2.1.0
|
||||||
|
License: GPLv3
|
||||||
|
|
||||||
|
Usage: $0 [options]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h, --help Show this help message and exit
|
||||||
|
-r <remote> Specify remote name (default: auto-detect)
|
||||||
|
-j Output in JSON format
|
||||||
|
-d Detailed Radicle info (peers, issues, patches, etc.)
|
||||||
|
-i Interactive mode for initialization
|
||||||
|
-f Force initialization and node start
|
||||||
|
-a Summarize all remotes
|
||||||
|
-l <level> Log level or file (error, warning, debug, file:/path)
|
||||||
|
-v Verbose logging (debug level)
|
||||||
|
|
||||||
|
Configuration:
|
||||||
|
Config file: $CONFIG_FILE
|
||||||
|
Plugin directory: $PLUGIN_DIR
|
||||||
|
Log file (if -l file:/path): Specified path
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
$0 Display repository info (text format)
|
||||||
|
$0 -j Output repository info in JSON
|
||||||
|
$0 -d Include detailed Radicle metadata
|
||||||
|
$0 -i Interactively initialize uninitialized Radicle repo
|
||||||
|
$0 -f Force Radicle initialization and node start
|
||||||
|
$0 -a List all remotes
|
||||||
|
$0 -l debug Enable debug logging
|
||||||
|
$0 -l file:/var/log/rad-info.log Log to file
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- Requires git and rad (Radicle CLI). Optional: curl, jq.
|
||||||
|
- Run 'rad node start' before using Radicle features.
|
||||||
|
- See https://radicle.xyz for Radicle documentation.
|
||||||
|
EOF
|
||||||
|
OUTPUT_GENERATED=true
|
||||||
|
}
|
||||||
|
|
||||||
|
# Parse command-line options
|
||||||
|
while getopts "r:jdihafl:v-:" opt; do
|
||||||
|
case "$opt" in
|
||||||
|
r) REMOTE_NAME="$OPTARG" ;;
|
||||||
|
j) OUTPUT_FORMAT="json" ;;
|
||||||
|
d) DETAILED_MODE="true" ;;
|
||||||
|
i) INTERACTIVE="true" ;;
|
||||||
|
f) FORCE_INIT="true" ;;
|
||||||
|
a) ALL_REM="true" ;;
|
||||||
|
l) LOG_LEVEL="$OPTARG" ;;
|
||||||
|
v) LOG_LEVEL="debug" ;;
|
||||||
|
h) show_help; exit 0 ;;
|
||||||
|
-) case "$OPTARG" in
|
||||||
|
help) show_help; exit 0 ;;
|
||||||
|
*) log_message "error" "Unknown option --$OPTARG"; show_help; exit 1 ;;
|
||||||
|
esac ;;
|
||||||
|
*) show_help; exit 1 ;;
|
||||||
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
# Ensure rad is initialized for the repository
|
# Validate log level
|
||||||
if ! rad inspect >/dev/null 2>&1; then
|
if [[ "$LOG_LEVEL" != "error" && "$LOG_LEVEL" != "warning" && "$LOG_LEVEL" != "debug" && ! "$LOG_LEVEL" =~ ^file: ]]; then
|
||||||
echo "Error: This repository is not initialized with Radicle. Run 'rad init' first."
|
log_message "error" "Invalid log level: $LOG_LEVEL. Use error, warning, debug, or file:/path"
|
||||||
|
show_help
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get repository details using rad commands
|
# Redirect stderr to /dev/null for clean output, keep fd 3 for logging
|
||||||
REPO_RID=$(rad inspect --rid 2>/dev/null | grep -o 'rad:[a-zA-Z0-9]\+' || echo "N/A")
|
exec 3>&2 2>/dev/null
|
||||||
if [ "$REPO_RID" == "N/A" ]; then
|
|
||||||
echo "Error: Could not retrieve Repository ID (RID)"
|
# Load config file
|
||||||
|
if [ -f "$CONFIG_FILE" ]; then
|
||||||
|
log_message "debug" "Loading config from $CONFIG_FILE"
|
||||||
|
source "$CONFIG_FILE" || log_message "error" "Failed to load config file: $CONFIG_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Load plugins
|
||||||
|
if [ -d "$PLUGIN_DIR" ]; then
|
||||||
|
for plugin in "$PLUGIN_DIR"/*.sh; do
|
||||||
|
if [ -f "$plugin" ]; then
|
||||||
|
log_message "debug" "Loading plugin: $plugin"
|
||||||
|
if ! (source "$plugin" 2>"$TEMP_DIR/plugin_stderr"); then
|
||||||
|
log_message "warning" "Failed to load plugin $plugin: $(cat "$TEMP_DIR/plugin_stderr")"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize variables
|
||||||
|
RID=""
|
||||||
|
NODE_ID=""
|
||||||
|
FULL_NAME=""
|
||||||
|
DEFAULT_BRANCH=""
|
||||||
|
CURRENT_BRANCH=""
|
||||||
|
CURRENT_COMMIT=""
|
||||||
|
REPO_STATUS=""
|
||||||
|
HOST=""
|
||||||
|
SEED_NODES=""
|
||||||
|
VISIBILITY=""
|
||||||
|
PEERS=""
|
||||||
|
ISSUES=""
|
||||||
|
PATCHES=""
|
||||||
|
OPEN_PATCHES=""
|
||||||
|
IDENTITY_REVISIONS=""
|
||||||
|
DELEGATES=""
|
||||||
|
SEED_STATUS=""
|
||||||
|
CONFIG_CACHE=""
|
||||||
|
|
||||||
|
# Function to get local Git details
|
||||||
|
get_local_git_details() {
|
||||||
|
if [ -z "$GIT_CACHE" ]; then
|
||||||
|
GIT_CACHE=$(git remote -v 2>/dev/null || echo "")
|
||||||
|
fi
|
||||||
|
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "N/A")
|
||||||
|
CURRENT_COMMIT=$(git rev-parse HEAD 2>/dev/null || echo "N/A")
|
||||||
|
local status_count
|
||||||
|
status_count=$(git status --porcelain 2>/dev/null | wc -l | xargs)
|
||||||
|
REPO_STATUS=$([ "$status_count" -eq 0 ] && echo "Clean" || echo "Dirty ($status_count uncommitted changes)")
|
||||||
|
DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo "main")
|
||||||
|
log_message "debug" "Local Git details: branch=$CURRENT_BRANCH, commit=$CURRENT_COMMIT, status=$REPO_STATUS, default=$DEFAULT_BRANCH"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to handle Radicle repositories
|
||||||
|
handle_radicle() {
|
||||||
|
if ! check_version >/dev/null; then
|
||||||
|
log_message "error" "Radicle CLI not available"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check Radicle node status
|
||||||
|
local stdout_file="$TEMP_DIR/node_stdout" stderr_file="$TEMP_DIR/node_stderr"
|
||||||
|
if ! exec_command "rad node status" $RAD_RETRY_COUNT "$stdout_file" "$stderr_file"; then
|
||||||
|
log_message "error" "Radicle node is not running"
|
||||||
|
start_node && exec_command "rad node status" $RAD_RETRY_COUNT "$stdout_file" "$stderr_file"
|
||||||
|
if [ $? -ne 0 ]; then return 1; fi
|
||||||
|
fi
|
||||||
|
local node_status
|
||||||
|
node_status=$(cat "$stdout_file" 2>/dev/null || echo "")
|
||||||
|
log_message "debug" "Node status: $node_status"
|
||||||
|
local peer_count
|
||||||
|
peer_count=$(echo "$node_status" | grep -c 'connected' | xargs || echo "0")
|
||||||
|
if [ "$peer_count" -eq 0 ]; then
|
||||||
|
log_message "warning" "Radicle node is running but not connected to peers. Check seed node configuration."
|
||||||
|
fi
|
||||||
|
log_message "debug" "Connected peers: $peer_count"
|
||||||
|
|
||||||
|
# Get RID
|
||||||
|
stdout_file="$TEMP_DIR/inspect_stdout" stderr_file="$TEMP_DIR/inspect_stderr"
|
||||||
|
if ! exec_command "rad inspect" $RAD_RETRY_COUNT "$stdout_file" "$stderr_file"; then
|
||||||
|
log_message "warning" "Not a Radicle repository"
|
||||||
|
prompt_init && return handle_radicle
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
RID=$(cat "$stdout_file" 2>/dev/null | grep -o 'rad:[^ ]*' || echo "")
|
||||||
|
if [ -z "$RID" ]; then
|
||||||
|
log_message "error" "Could not retrieve Radicle Repository ID (RID)"
|
||||||
|
prompt_init && return handle_radicle
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
log_message "debug" "RID: $RID"
|
||||||
|
|
||||||
|
# Get Node ID
|
||||||
|
stdout_file="$TEMP_DIR/self_stdout" stderr_file="$TEMP_DIR/self_stderr"
|
||||||
|
exec_command "rad self" $RAD_RETRY_COUNT "$stdout_file" "$stderr_file" || true
|
||||||
|
NODE_ID=$(cat "$stdout_file" 2>/dev/null | grep 'Node ID (NID)' | awk '{print $NF}' || echo "N/A")
|
||||||
|
log_message "debug" "Node ID: $NODE_ID"
|
||||||
|
|
||||||
|
# Get repository metadata
|
||||||
|
stdout_file="$TEMP_DIR/payload_stdout" stderr_file="$TEMP_DIR/payload_stderr"
|
||||||
|
local payload_output
|
||||||
|
if exec_command "rad inspect --payload" $RAD_RETRY_COUNT "$stdout_file" "$stderr_file"; then
|
||||||
|
payload_output=$(cat "$stdout_file" 2>/dev/null || echo "")
|
||||||
|
log_message "debug" "rad inspect --payload output: $payload_output"
|
||||||
|
if check_tools jq; then
|
||||||
|
FULL_NAME=$(echo "$payload_output" | jq -r '.["xyz.radicle.project"].name // "N/A"' 2>/dev/null || echo "N/A")
|
||||||
|
VISIBILITY=$(echo "$payload_output" | jq -r '.visibility // "public"' 2>/dev/null || echo "public")
|
||||||
|
DEFAULT_BRANCH=$(echo "$payload_output" | jq -r '.["xyz.radicle.project"].defaultBranch // "'"$CURRENT_BRANCH"'"' 2>/dev/null || echo "$CURRENT_BRANCH")
|
||||||
|
DELEGATES=$(echo "$payload_output" | jq -r '.delegates | length' 2>/dev/null || echo "N/A")
|
||||||
|
else
|
||||||
|
log_message "warning" "jq not installed; falling back to directory name for metadata"
|
||||||
|
FULL_NAME=$(basename "$(git rev-parse --show-toplevel)" 2>/dev/null || echo "N/A")
|
||||||
|
VISIBILITY="public"
|
||||||
|
DEFAULT_BRANCH="$CURRENT_BRANCH"
|
||||||
|
DELEGATES="N/A"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_message "warning" "Repository not fully initialized"
|
||||||
|
prompt_init && return handle_radicle
|
||||||
|
FULL_NAME=$(basename "$(git rev-parse --show-toplevel)" 2>/dev/null || echo "N/A")
|
||||||
|
VISIBILITY="public"
|
||||||
|
DEFAULT_BRANCH="$CURRENT_BRANCH"
|
||||||
|
DELEGATES="N/A"
|
||||||
|
fi
|
||||||
|
[ "$FULL_NAME" = "N/A" ] && FULL_NAME=$(basename "$(git rev-parse --show-toplevel)" 2>/dev/null || echo "N/A")
|
||||||
|
log_message "debug" "Full Name: $FULL_NAME, Visibility: $VISIBILITY, Default Branch: $DEFAULT_BRANCH, Delegates: $DELEGATES"
|
||||||
|
|
||||||
|
# Get seed nodes
|
||||||
|
stdout_file="$TEMP_DIR/config_stdout" stderr_file="$TEMP_DIR/config_stderr"
|
||||||
|
if [ -z "$CONFIG_CACHE" ]; then
|
||||||
|
if exec_command "rad config" $RAD_RETRY_COUNT "$stdout_file" "$stderr_file"; then
|
||||||
|
CONFIG_CACHE=$(cat "$stdout_file" 2>/dev/null || echo "")
|
||||||
|
log_message "debug" "rad config output: $CONFIG_CACHE"
|
||||||
|
else
|
||||||
|
CONFIG_CACHE=""
|
||||||
|
log_message "warning" "Failed to parse rad config for seed nodes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ -n "$CONFIG_CACHE" ] && echo "$CONFIG_CACHE" | grep -q '{'; then
|
||||||
|
if check_tools jq; then
|
||||||
|
SEED_NODES=$(echo "$CONFIG_CACHE" | jq -r '.preferredSeeds[]' 2>/dev/null | paste -sd, - || echo "N/A")
|
||||||
|
SEED_STATUS=$(echo "$node_status" | grep -oE '[^ ]+@[^ ]+:8776.*connected' | sed 's/.*\(@.*connected\)/\1/' | paste -sd, - || echo "N/A")
|
||||||
|
else
|
||||||
|
SEED_NODES=$(echo "$CONFIG_CACHE" | grep -oE '[^ ]+@[^ ]+:8776' | paste -sd, - || echo "N/A")
|
||||||
|
SEED_STATUS="N/A"
|
||||||
|
log_message "warning" "jq not installed; using fallback for seed nodes"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
SEED_NODES=""
|
||||||
|
SEED_STATUS=""
|
||||||
|
fi
|
||||||
|
log_message "info" "Seed Nodes: $SEED_NODES, Status: $SEED_STATUS"
|
||||||
|
|
||||||
|
# Detailed mode
|
||||||
|
if [ "$DETAILED_MODE" = "true" ]; then
|
||||||
|
PEERS=$(rad peer ls 2>/dev/null | wc -l | xargs || echo "N/A")
|
||||||
|
ISSUES=$(rad issue ls 2>/dev/null | wc -l | xargs || echo "N/A")
|
||||||
|
PATCHES=$(rad patch ls --all 2>/dev/null | wc -l | xargs || echo "N/A")
|
||||||
|
OPEN_PATCHES=$(rad patch ls --open 2>/dev/null | wc -l | xargs || echo "N/A")
|
||||||
|
IDENTITY_REVISIONS=$(rad id list 2>/dev/null | grep -c 'accepted' || echo "N/A")
|
||||||
|
log_message "debug" "Peers: $PEERS, Issues: $ISSUES, Patches: $PATCHES, Open Patches: $OPEN_PATCHES, Identity Revisions: $IDENTITY_REVISIONS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
HOST="radicle"
|
||||||
|
get_local_git_details
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to handle centralized Git
|
||||||
|
handle_centralized() {
|
||||||
|
local remote_url=$1
|
||||||
|
if [[ "$remote_url" =~ ^rad:// ]]; then
|
||||||
|
log_message "error" "Radicle URL ($remote_url) cannot be processed as centralized Git"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
local parsed_url="$remote_url"
|
||||||
|
if [[ "$remote_url" =~ ^git@ ]]; then
|
||||||
|
parsed_url=$(echo "$remote_url" | sed -E 's/git@([^:]+):(.+)\.git/https:\/\/\1\/\2/')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$parsed_url" =~ https?://([^/]+)/(.*) ]]; then
|
||||||
|
HOST="${BASH_REMATCH[1]}"
|
||||||
|
FULL_NAME=$(echo "${BASH_REMATCH[2]}" | sed 's/\.git$//')
|
||||||
|
else
|
||||||
|
log_message "error" "Invalid remote URL: $remote_url. Expected format: https://host/path"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
log_message "Centralized Git: Host=$HOST, Age=$FULL_NAME"
|
||||||
|
|
||||||
|
# API-based metadata
|
||||||
|
if check_tools curl jq; then
|
||||||
|
local api_url=""
|
||||||
|
local curl_opts=(--silent --fail)
|
||||||
|
[ -n "$GITHUB_TOKEN" ] && [ "$HOST" = "github.com" ] && curl_opts+=(--header "Authorization: token $GITHUB_TOKEN")
|
||||||
|
case "$HOST in
|
||||||
|
github.com) api_url="https://api.github.com/repos/$FULL_NAME" ;;
|
||||||
|
gitlab.com) api_url="https://gitlab.com/api/v4/projects/$(echo -n "$FULL_NAME" | xxd -p | tr -d '\n')" ;;
|
||||||
|
bitbucket.org) api_url="https://api.bitbucket.org/2.0/repositories/$FULL_NAME" ;;
|
||||||
|
*) log_message "debug" "No API support for host: $HOST" ;;
|
||||||
|
esac
|
||||||
|
if [ -n "$api_url" ]; then
|
||||||
|
local stdout_file="$TEMP_DIR/api_stdout" stderr_file="$TEMP_DIR/api_stderr"
|
||||||
|
if exec_command "curl ${curl_opts[*]}" '$api_url'" $RAD_TIMEOUT_COUNT "$stdout_file" "$stderr_file"; then
|
||||||
|
local repo_details
|
||||||
|
repo_details=$(cat "$stdout_file" 2>/dev/null || echo "")
|
||||||
|
log_message "debug" "API response: $repo_details"
|
||||||
|
FULL_NAME=$(echo "$repo_details" | jq -r '.full_name // .path_with_namespace // "$FULL_NAME"' 2>/dev/null || echo "$FULL_NAME")
|
||||||
|
DEFAULT_BRANCH=$(echo "$repo_details" | jq -r '.default_branch // .mainbranch.name // "main"' 2>/dev/null || echo "main")
|
||||||
|
else
|
||||||
|
log_message "warning" "Failed to fetch API metadata for $HOST"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_message "warning" "curl or jq not installed; skipping API metadata"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
get_local_git_details()
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to summarize all remotes
|
||||||
|
summarize_all() {
|
||||||
|
if [ -z "$GIT_CACHE" ]; then
|
||||||
|
GIT_CACHE=$(git remote -v 2>/dev/null || echo "")
|
||||||
|
fi
|
||||||
|
local remotes
|
||||||
|
mapfile -t remotes < <(echo "$GIT_CACHE" | awk '{print $1}' | sort -u || echo "")
|
||||||
|
REMOTES=()
|
||||||
|
for remote in "${remotes[@]}"; do
|
||||||
|
local url=$(echo "$GIT_CACHE" | grep "^$remote\s" | awk '{print $2}' | head -n1 || echo "")
|
||||||
|
local type="centralized"
|
||||||
|
[[ "$url" =~ ^rad:// ]] && type="radicle"
|
||||||
|
REMOTES+=("$remote: $type ($url)")
|
||||||
|
log_message "debug" "Remote: $remote, Type: $type, URL: $url"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to output repository information
|
||||||
|
output_info() {
|
||||||
|
if [ "$OUTPUT_FORMAT" = "json" ]; then
|
||||||
|
if ! check_tools jq; then
|
||||||
|
log_message "error" "jq is required for JSON output. Falling back to text."
|
||||||
|
OUTPUT_FORMAT="text"
|
||||||
|
else
|
||||||
|
jq -n --arg host "$HOST" \
|
||||||
|
--arg full_name "$FULL_NAME" \
|
||||||
|
--arg rid "$RID" \
|
||||||
|
--arg node_id node_id "$NODE_ID" \
|
||||||
|
--arg default_branch "$DEFAULT_BRANCH" \
|
||||||
|
--arg current_branch "$CURRENT_BRANCH" \
|
||||||
|
--arg current_commit "$CURRENT_COMMIT" \
|
||||||
|
--arg repo_status "$REPO_STATUS" \
|
||||||
|
--arg seed_nodes "$SEED_NODES" \
|
||||||
|
--arg seed_status "$SEED_STATUS" \
|
||||||
|
--arg visibility "$VISIBILITY" \
|
||||||
|
--arg peers "$PEERS" \
|
||||||
|
--arg issues "$ISSUES" \
|
||||||
|
--arg patches "$PATCHES" \
|
||||||
|
--arg open_patches "$OPEN_PATCHES" \
|
||||||
|
--arg identity_revisions "$IDENTITY_REVISIONS" \
|
||||||
|
--arg delegates "$DELEGATES" \
|
||||||
|
--argjson remotes "$(printf '%s\n' "${REMOTES[@]}" | jq -R . | jq -s .)" \
|
||||||
|
'{
|
||||||
|
hosting_service: $host,
|
||||||
|
full_name: $full_name,
|
||||||
|
repo_id: $rid,
|
||||||
|
node_id: $node_id,
|
||||||
|
default_branch: $default_branch,
|
||||||
|
current_branch: $current_branch,
|
||||||
|
current_commit: $current_commit,
|
||||||
|
repo_status: $repo_status,
|
||||||
|
seed_nodes: $seed_nodes,
|
||||||
|
seed_status: $seed_status,
|
||||||
|
visibility: $visibility,
|
||||||
|
peers: $peers,
|
||||||
|
issues: $issues,
|
||||||
|
patches: $patches,
|
||||||
|
open_patches: $open_patches,
|
||||||
|
identity_revisions: $identity_revisions,
|
||||||
|
delegates: $delegates,
|
||||||
|
remotes: $remotes
|
||||||
|
}'
|
||||||
|
OUTPUT_GENERATED=true
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$OUTPUT_FORMAT" = "text" ]; then
|
||||||
|
echo
|
||||||
|
echo "Repository Information:"
|
||||||
|
echo "----------------------"
|
||||||
|
echo "Hosting Service: ${HOST:-N/A}"
|
||||||
|
echo "Full Name: ${FULL_NAME:-N/A}"
|
||||||
|
echo "Repository ID: ${RID:-N/A}"
|
||||||
|
echo "Node ID: ${NODE_ID:-N/A}"
|
||||||
|
echo "Default Branch: ${DEFAULT_BRANCH:-N/A}"
|
||||||
|
echo "Current Branch: ${CURRENT_BRANCH:-N/A}"
|
||||||
|
echo "Current Commit: ${CURRENT_COMMIT:-N/A}"
|
||||||
|
echo "Repository Status: ${REPO_STATUS:-N/A}"
|
||||||
|
[ -n "$SEED_NODES" ] && [ "$SEED_NODES" != "N/A" ] && echo "Seed Nodes: $SEED_NODES"
|
||||||
|
[ -n "$SEED_STATUS" ] && [ "$SEED_STATUS" != "N/A" ] && echo "Seed Status: $SEED_STATUS"
|
||||||
|
[ -n "$VISIBILITY" ] && [ "$VISIBILITY" != "N/A" ] && echo "Visibility: $VISIBILITY"
|
||||||
|
if [ "$DETAILED_MODE" = "true" ]; then
|
||||||
|
[ -n "$PEERS" ] && [ "$PEERS" != "N/A" ] && echo "Peers: $PEERS"
|
||||||
|
[ -n "$ISSUES" ] && [ "$ISSUES" != "N/A" ] && echo "Issues: $ISSUES"
|
||||||
|
[ -n "$PATCHES" ] && [ "$PATCHES" != "N/A" ] && echo "Total Patches: $PATCHES"
|
||||||
|
[ -n "$OPEN_PATCHES" ] && [ "$OPEN_PATCHES" != "N/A" ] && echo "Open Patches: $OPEN_PATCHES"
|
||||||
|
[ -n "$IDENTITY_REVISIONS" ] && [ "$IDENTITY_REVISIONS" != "N/A" ] && echo "Accepted Identity Revisions: $IDENTITY_REVISIONS"
|
||||||
|
[ -n "$DELEGATES" ] && [ "$DELEGATES" != "N/A" ] && echo "Delegates: $DELEGATES"
|
||||||
|
fi
|
||||||
|
if [ "$ALL_REM" = "true" ]; then
|
||||||
|
echo "Remotes:"
|
||||||
|
for remote in "${REMOTES[@]}"; do
|
||||||
|
echo " $remote"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
echo "----------------------"
|
||||||
|
if [ "$HOST" = "radicle" ]; then
|
||||||
|
echo "Clone Command: rad clone ${RID:-<repository-id>}"
|
||||||
|
echo "Sync Command: rad sync"
|
||||||
|
echo "Note: Ensure Radicle node is running ('rad node start') and configured with seed nodes."
|
||||||
|
echo "See 'rad help' for more commands and https://radicle.xyz for documentation."
|
||||||
|
else
|
||||||
|
echo "Clone Command: git clone ${REMOTE_URL:-<remote-url>}"
|
||||||
|
echo "Sync Command: git fetch ${REMOTE_NAME:-origin} && git pull ${REMOTE_NAME:-origin} ${DEFAULT_BRANCH:-main}"
|
||||||
|
fi
|
||||||
|
OUTPUT_GENERATED=true
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main logic
|
||||||
|
if ! git rev-parse --is-inside-work-tree >/dev/null; then
|
||||||
|
log_message "error" "Not inside a Git repository"
|
||||||
|
show_help
|
||||||
|
rm -rf "$TEMP_DIR"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get repository name and visibility
|
if ! check_tools git; then
|
||||||
REPO_INFO=$(rad inspect --json 2>/dev/null | jq -r '.name, .visibility.type' || echo "N/A N/A")
|
show_help
|
||||||
read REPO_NAME VISIBILITY <<< "$REPO_INFO"
|
rm -rf "$TEMP_DIR"
|
||||||
if [ "$REPO_NAME" == "N/A" ]; then
|
|
||||||
echo "Error: Could not retrieve repository name"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get user identity (DID and NID)
|
if [ "$ALL_REM" = "true" ]; then
|
||||||
USER_INFO=$(rad self --json 2>/dev/null | jq -r '.did, .nid' || echo "N/A N/A")
|
summarize_all
|
||||||
read DID NID <<< "$USER_INFO"
|
elif [ -z "$REMOTE_NAME" ]; then
|
||||||
if [ "$DID" == "N/A" ]; then
|
REMOTE_NAME=$(find_radicle_remote)
|
||||||
echo "Error: Could not retrieve user identity (DID)"
|
if [ -z "$REMOTE_NAME" ] && rad inspect >/dev/null 2>&1; then
|
||||||
exit 1
|
REMOTE_NAME="rad"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get preferred seed nodes from config
|
if [ -n "$REMOTE_NAME" ]; then
|
||||||
PREFERRED_SEEDS=$(rad config --json 2>/dev/null | jq -r '.preferredSeeds[]' | tr '\n' ',' | sed 's/,$//')
|
REMOTE_URL=$(git remote get-url "$REMOTE_NAME" 2>/dev/null || echo "")
|
||||||
if [ -z "$PREFERRED_SEEDS" ]; then
|
log_message "debug" "Processing remote: $REMOTE_NAME ($REMOTE_URL)"
|
||||||
PREFERRED_SEEDS="None configured"
|
if [[ "$REMOTE_URL" =~ ^rad:// ]] || rad inspect >/dev/null 2>&1; then
|
||||||
fi
|
handle_radicle || {
|
||||||
|
log_message "warning" "Failed to process Radicle repository. Falling back to Git details."
|
||||||
# Get local repository details
|
get_local_git_details
|
||||||
DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo "main")
|
FULL_NAME=$(basename "$(git rev-parse --show-toplevel)" 2>/dev/null || echo "N/A")
|
||||||
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "N/A")
|
VISIBILITY="public"
|
||||||
CURRENT_COMMIT=$(git rev-parse HEAD 2>/dev/null || echo "N/A")
|
HOST="radicle"
|
||||||
REPO_STATUS=$(git status --porcelain 2>/dev/null | wc -l | xargs)
|
DEFAULT_BRANCH="$CURRENT_BRANCH"
|
||||||
if [ "$REPO_STATUS" -eq 0 ]; then
|
}
|
||||||
REPO_STATUS="Clean"
|
else
|
||||||
|
handle_centralized "$REMOTE_URL" || {
|
||||||
|
log_message "warning" "Failed to process centralized Git repository."
|
||||||
|
get_local_git_details
|
||||||
|
FULL_NAME=$(basename "$(git rev-parse --show-toplevel)" 2>/dev/null || echo "N/A")
|
||||||
|
HOST="unknown"
|
||||||
|
}
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
REPO_STATUS="Dirty ($REPO_STATUS uncommitted changes)"
|
log_message "warning" "No Radicle remote found. Processing as centralized Git."
|
||||||
|
REMOTE_NAME="origin"
|
||||||
|
REMOTE_URL=$(git remote get-url "$REMOTE_NAME" 2>/dev/null || echo "")
|
||||||
|
if [ -z "$REMOTE_URL" ]; then
|
||||||
|
log_message "error" "No remote URL found"
|
||||||
|
get_local_git_details
|
||||||
|
FULL_NAME=$(basename "$(git rev-parse --show-toplevel)" 2>/dev/null || echo "N/A")
|
||||||
|
HOST="unknown"
|
||||||
|
else
|
||||||
|
handle_centralized "$REMOTE_URL" || {
|
||||||
|
log_message "warning" "Failed to process centralized Git repository."
|
||||||
|
get_local_git_details
|
||||||
|
FULL_NAME=$(basename "$(git rev-parse --show-toplevel)" 2>/dev/null || echo "N/A")
|
||||||
|
HOST="unknown"
|
||||||
|
}
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get sync status (peers seeding the repo)
|
# Ensure output
|
||||||
SYNC_STATUS=$(rad sync status --json 2>/dev/null | jq -r '.peers[]?.node' | tr '\n' ',' | sed 's/,$//' || echo "No peers found")
|
output_info || {
|
||||||
if [ -z "$SYNC_STATUS" ]; then
|
log_message "error" "Failed to generate output"
|
||||||
SYNC_STATUS="No peers found"
|
show_help
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$OUTPUT_GENERATED" = "false" ]; then
|
||||||
|
log_message "error" "No output generated"
|
||||||
|
show_help
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get web view URL (if public)
|
# Clean up
|
||||||
if [ "$VISIBILITY" == "public" ]; then
|
rm -rf "$TEMP_DIR"
|
||||||
PUBLIC_EXPLORER=$(rad config --json | jq -r '.publicExplorer' | sed "s@\\\$host@seed.radicle.garden@g;s@\\\$rid@$REPO_RID@g;s@\\\$path@@g")
|
exit 0
|
||||||
else
|
|
||||||
PUBLIC_EXPLORER="N/A (Private repository)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Output repository information
|
|
||||||
cat <<EOF
|
|
||||||
Radicle Repository Information:
|
|
||||||
------------------------------
|
|
||||||
Repository Name: $REPO_NAME
|
|
||||||
Repository ID (RID): $REPO_RID
|
|
||||||
Visibility: $VISIBILITY
|
|
||||||
User DID: $DID
|
|
||||||
Node ID (NID): $NID
|
|
||||||
Preferred Seed Nodes: $PREFERRED_SEEDS
|
|
||||||
Web View URL: $PUBLIC_EXPLORER
|
|
||||||
Default Branch: $DEFAULT_BRANCH
|
|
||||||
Current Branch: $CURRENT_BRANCH
|
|
||||||
Current Commit: $CURRENT_COMMIT
|
|
||||||
Repository Status: $REPO_STATUS
|
|
||||||
Seeding Peers: $SYNC_STATUS
|
|
||||||
------------------------------
|
|
||||||
Clone Command: rad clone $REPO_RID
|
|
||||||
Sync Command: rad sync $REPO_RID
|
|
||||||
Initialize Command (if not cloned): rad init --name $REPO_NAME --default-branch $DEFAULT_BRANCH --visibility $VISIBILITY
|
|
||||||
------------------------------
|
|
||||||
Notes:
|
|
||||||
- To clone, ensure Radicle is installed (see https://radicle.xyz).
|
|
||||||
- For private repositories, ensure you have the necessary cryptographic keys.
|
|
||||||
- Syncing requires at least one seeding peer to be online.
|
|
||||||
EOF
|
|
||||||
|
|
|
@ -24,4 +24,4 @@ The directory hosts a public-facing, SEO-optimized canonical declaration for th
|
||||||
|
|
||||||
This directory ensures the `git-sigil` project is discoverable via search engines and accessible to humans and bots. It declares the canonical repository at [https://remember.thefoldwithin.earth/mrhavens/git-sigil](https://remember.thefoldwithin.earth/mrhavens/git-sigil) and links to all mirrors, reinforcing the GitField recursive metadata strategy for sovereign publishing.
|
This directory ensures the `git-sigil` project is discoverable via search engines and accessible to humans and bots. It declares the canonical repository at [https://remember.thefoldwithin.earth/mrhavens/git-sigil](https://remember.thefoldwithin.earth/mrhavens/git-sigil) and links to all mirrors, reinforcing the GitField recursive metadata strategy for sovereign publishing.
|
||||||
|
|
||||||
Generated by `gitfield-sync` at 2025-06-11T23:29:59Z (v1.4).
|
Generated by `gitfield-sync` at 2025-06-13T03:33:02Z (v1.4).
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
"https://gitea.com/mrhavens/git-sigil",
|
"https://gitea.com/mrhavens/git-sigil",
|
||||||
"rad:z3FEj7rF8gZw9eFksCuiN43qjzrex"
|
"rad:z3FEj7rF8gZw9eFksCuiN43qjzrex"
|
||||||
],
|
],
|
||||||
"dateModified": "2025-06-11T23:29:59Z",
|
"dateModified": "2025-06-13T03:33:02Z",
|
||||||
"author": {
|
"author": {
|
||||||
"@type": "Person",
|
"@type": "Person",
|
||||||
"name": "Mark Randall Havens"
|
"name": "Mark Randall Havens"
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<!-- Generated by gitfield-sync v1.4 | 2025-06-11T23:29:59Z -->
|
<!-- Generated by gitfield-sync v1.4 | 2025-06-13T03:33:02Z -->
|
||||||
<header>
|
<header>
|
||||||
<h1>GitField Sovereign Canonical Repository: <code>git-sigil</code></h1>
|
<h1>GitField Sovereign Canonical Repository: <code>git-sigil</code></h1>
|
||||||
</header>
|
</header>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# SHA-256 Integrity Hashes for /docs Metadata Files
|
# SHA-256 Integrity Hashes for /docs Metadata Files
|
||||||
# Generated by gitfield-sync at 2025-06-11T23:29:59Z (v1.4)
|
# Generated by gitfield-sync at 2025-06-13T03:33:02Z (v1.4)
|
||||||
|
|
||||||
6093f6beb366d18662b3cea94d3c24b232ab174ccc860b00e97aef51a6f5e4ed /home/mrhavens/fieldwork/git-sigil/docs/canonical.meta
|
6093f6beb366d18662b3cea94d3c24b232ab174ccc860b00e97aef51a6f5e4ed /home/mrhavens/fieldwork/git-sigil/docs/canonical.meta
|
||||||
5ae6c8cbcd409b4b672aa34bff98e061810a9e85818abd1bc0a028fe7edfcd65 /home/mrhavens/fieldwork/git-sigil/docs/canonical.md
|
5ae6c8cbcd409b4b672aa34bff98e061810a9e85818abd1bc0a028fe7edfcd65 /home/mrhavens/fieldwork/git-sigil/docs/canonical.md
|
||||||
|
|
|
@ -2,97 +2,97 @@
|
||||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
<url>
|
<url>
|
||||||
<loc>https://remember.thefoldwithin.earth/mrhavens/git-sigil</loc>
|
<loc>https://remember.thefoldwithin.earth/mrhavens/git-sigil</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>1.0</priority>
|
<priority>1.0</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://github.com/mrhavens/git-sigil/docs/index.html</loc>
|
<loc>https://github.com/mrhavens/git-sigil/docs/index.html</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.9</priority>
|
<priority>0.9</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://github.com/mrhavens/git-sigil/docs/canonical.meta</loc>
|
<loc>https://github.com/mrhavens/git-sigil/docs/canonical.meta</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://github.com/mrhavens/git-sigil/docs/canonical.md</loc>
|
<loc>https://github.com/mrhavens/git-sigil/docs/canonical.md</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://github.com/mrhavens/git-sigil/docs/index.json</loc>
|
<loc>https://github.com/mrhavens/git-sigil/docs/index.json</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://github.com/mrhavens/git-sigil/docs/gitfield.json</loc>
|
<loc>https://github.com/mrhavens/git-sigil/docs/gitfield.json</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://github.com/mrhavens/git-sigil/docs/.well-known/gitfield.json</loc>
|
<loc>https://github.com/mrhavens/git-sigil/docs/.well-known/gitfield.json</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://github.com/mrhavens/git-sigil/docs/repos.json</loc>
|
<loc>https://github.com/mrhavens/git-sigil/docs/repos.json</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://github.com/mrhavens/git-sigil/docs/pushed.log</loc>
|
<loc>https://github.com/mrhavens/git-sigil/docs/pushed.log</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://github.com/mrhavens/git-sigil/docs/gitfield.README.txt</loc>
|
<loc>https://github.com/mrhavens/git-sigil/docs/gitfield.README.txt</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://github.com/mrhavens/git-sigil</loc>
|
<loc>https://github.com/mrhavens/git-sigil</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://gitlab.com/mrhavens/git-sigil</loc>
|
<loc>https://gitlab.com/mrhavens/git-sigil</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://bitbucket.org/thefoldwithin/git-sigil</loc>
|
<loc>https://bitbucket.org/thefoldwithin/git-sigil</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://remember.thefoldwithin.earth/mrhavens/git-sigil</loc>
|
<loc>https://remember.thefoldwithin.earth/mrhavens/git-sigil</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://codeberg.org/mrhavens/git-sigil</loc>
|
<loc>https://codeberg.org/mrhavens/git-sigil</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://gitea.com/mrhavens/git-sigil</loc>
|
<loc>https://gitea.com/mrhavens/git-sigil</loc>
|
||||||
<lastmod>2025-06-11T23:29:59Z</lastmod>
|
<lastmod>2025-06-13T03:33:02Z</lastmod>
|
||||||
<changefreq>weekly</changefreq>
|
<changefreq>weekly</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue