-
Notifications
You must be signed in to change notification settings - Fork 750
Implementation of multiple revisions without revisions map #6620
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
jorgee
wants to merge
127
commits into
master
Choose a base branch
from
mult_revisions_no_map
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
127 commits
Select commit
Hold shift + click to select a range
7d027ec
Multiple revisions 1st: AssetManager, Cmd Clone Pull Run
marcodelapierre 106e8df
removed revision paramter from clone pull run
marcodelapierre 0a9e6f8
updated unit tests for AssetManager
marcodelapierre 37d332e
Merge branch 'master' into add/mult_revisions
marcodelapierre 5a9b159
AssetManager provider.revision assigned at AssetManager object creation
marcodelapierre 94d34f3
Codespell typo in changelog
marcodelapierre 4744774
AssetManager: removed checkout method
marcodelapierre d9e7b2b
Merge branch 'master' into add/mult_revisions
marcodelapierre 08718ef
assetmanager: fixed build signature, and unit tests
marcodelapierre 242a600
assetmanager: one more build signature fix
marcodelapierre 35ad1e9
AssetManager: fix for multi revs in find() method
marcodelapierre 463b6f1
Multiple revisions: added for Cmds Drop, View, Config, Info
marcodelapierre 2d3273e
minor fixes to log outputs in CmdRun
marcodelapierre d2e5ffe
AssetManager: documented new localPath schema
marcodelapierre 60c3c5e
K8sDriverLauncher : added revision support
marcodelapierre 4bf1e37
updates to AssetManagerTest
marcodelapierre 7e32111
edit to AssetManagerTest, git.pull for TAGS does not output result of…
marcodelapierre 3b2d461
minor fix in GitlabRepositoryProvider: using DEFAULT_BRANCH instead o…
marcodelapierre 2e6461e
Minor edits
bentsherman a8d2dee
Merge branch 'master' into add/mult_revisions
marcodelapierre eaf45d8
[ci fast] Merge branch 'master' into add/mult_revisions
pditommaso ed17284
Merge branch 'master' into add/mult_revisions
marcodelapierre b3f141d
parametrised revision delimiter
marcodelapierre 6706bd9
nf pull: option to list or not revs for each project
marcodelapierre e62f543
nicer output for nf list -r
marcodelapierre bd19877
minor edit to CmdList
marcodelapierre c0268af
AssetManager: adding listRevisions method (work in progress)
marcodelapierre aae2afc
small tune to CmdList
marcodelapierre 268ec79
minor tweak to CmdList
marcodelapierre ac8d755
AssetManager: listRevisions method now working
marcodelapierre 70c8bcc
CmdDrop option to drop all revisions of given project
marcodelapierre 8bcd717
AssetManagerTest: added test for method listRevisions
marcodelapierre 4616e7f
docs - cli: add -a options for list and drop
marcodelapierre e4b9d78
docs - cli: add/update -r option for relevant commands
marcodelapierre 958955a
CmdInfo: now also prints info on pulled revisions
marcodelapierre f220e98
CmdInfo made smarter when non only non default revisions pulled
marcodelapierre 2ad9a24
CmdInfoTest updated
marcodelapierre 35ea812
CmdInfoTest fix
marcodelapierre 80ecacd
CmdInfo: added code comment
marcodelapierre 5e4b45f
AssetManager: default revision recognised correctly if specified in m…
marcodelapierre aa94d7b
small CLI Docs update
marcodelapierre d965ee5
added a couple of comments
marcodelapierre f6e6174
Merge branch 'master' into add/mult_revisions
marcodelapierre ca48a97
Merge branch 'master' into add/mult_revisions
pditommaso 12d31a2
fix merge conflicts
marcodelapierre 9aacb2b
Review: REVISION_DELIM and added comments
marcodelapierre 12718c7
review: added method getProjectWithRevision
marcodelapierre 0b57262
updated method getBaseNameWithRevision
marcodelapierre 17067ea
docs/sharing: added paragraph on multiple revisions, with caveat on r…
marcodelapierre 67dc5d5
cmd info: removed sticky current revision, updated docs
marcodelapierre 7716416
fixed unit tests in CmdInfoTest
marcodelapierre 45be84b
Merge branch 'master' into add/mult_revisions
marcodelapierre 2af4ba7
merged from master
marcodelapierre afa8a1c
Merge branch 'master' into add/mult_revisions
marcodelapierre dc4bdee
Merge branch 'master' into add/mult_revisions
marcodelapierre 4c93b3e
Merge branch 'master' into add/mult_revisions_apr_revision_path
marcodelapierre 561a59f
docs update/fix
marcodelapierre 48cf800
multi revs: consistent usage of manager.getProjectWithRevision() in Cmds
marcodelapierre 6070273
AssetManager: undo redirect of default revision to null (circular man…
marcodelapierre da159d9
AssetManager: removed chicken n egg between hubprovider and localpath
marcodelapierre 1824952
AssetManager: new location for revisions
marcodelapierre c2db132
Using new Asset location for CmdDrop and CmdList
marcodelapierre 32fe348
Using new Asset location for CmdPull
marcodelapierre 8411c2e
CmdDrop and CmdList: got rid of REVISION_DELIM
marcodelapierre c190dac
Using new Asset location for CmdInfo
marcodelapierre 55868c7
updated CmdClone
marcodelapierre 05ac8c9
AssetManager: reverted to original find() method
marcodelapierre 0dbc77d
fixed revisionSubdir and unit tests
marcodelapierre e3cfec4
docs updates
marcodelapierre b6352c4
AssetManager: REVISION_DELIM not needed any more
marcodelapierre db4903a
AssetManagerTest: further fixes
marcodelapierre 90f8f1d
AssetManager: revert back to set revision in checkValidRemoteRepo()
marcodelapierre a3d5557
AssetManager: using existing revision map
marcodelapierre 0f29320
using DEFAULT_REVISION_DIRNAME
marcodelapierre 93db4ee
AssetManager: add checkLocalBarePath
marcodelapierre 71a5b2f
rename checkLocalBarePath to checkBareRepo
marcodelapierre 70847e7
AssetManager: added revisionToCommitWithBareRepo, work in progress
marcodelapierre 9c68166
minor update
marcodelapierre 0a3d4a6
AssetManager: updateRevisionMap ok, overall work in progress
marcodelapierre 920f8aa
final updateProjectDir ; fixed cmddrop
marcodelapierre be2b84f
in localPath, use commitId, plus related fixes in listRevisions
marcodelapierre 8da7bea
list command can also show commits
marcodelapierre d7c2f30
updated docs/sharing.md commit in localpath
marcodelapierre f27b115
remove use of getPulledRevisions
marcodelapierre 3d45ef3
fix for CmdDrop: use of DEFAULT_REVISION_DIRNAME
marcodelapierre 06a2229
CmdList: better output for default revision
marcodelapierre a77bd59
AssetManager, CmdDrop : some method signature updates
marcodelapierre 28fe569
Merge branch 'master' into add/mult_revisions_jun_revision_map
marcodelapierre 3b9978b
AssetManager.download(): using bareRepo for pulling, plus related cha…
marcodelapierre 20e6edc
CmdList and CmdPull: no need for manager.close()
marcodelapierre 2199974
AssetManagerTest: updated list tests
marcodelapierre 36dab4d
AssetManagerTest: fixed manifest test 1
marcodelapierre 2375bda
AssetManagerTest: fixed all executed tests
marcodelapierre ae835e8
CmdPullTest fixed
marcodelapierre 6769307
AssetManagerTest: fixed tests that need github token
marcodelapierre 2cf9942
AssetManagerTest: add test for checkBareRepo
marcodelapierre 0c140de
AssetManagerTest: added various tests for revToCommit methods
marcodelapierre 923e200
AssetManagerTest: updated listRevs tests
marcodelapierre bac8797
AssetManager: update to revisionToCommitWithBareRepo
marcodelapierre 5de01cc
AssetManagerTest: removed unneeded variable
marcodelapierre b061203
UpdateModuleTest: small makeup
marcodelapierre 5a81758
UpdateModuleTest: fixed all unit tests
marcodelapierre 3052994
UpdateModuleTest: minor edit
marcodelapierre 6d6d7ae
AssetManager: set revision and localPath outside constructor as separ…
marcodelapierre 69416fc
CmdPull: allow -a as equivalent to -all
marcodelapierre 1c920db
Merge branch 'master' into add/mult_revisions_jun_revision_map
jorgee 401fbb2
Merge branch 'master' into add/mult_revisions_jun_revision_map
jorgee 95667ba
fix default branch test and remove replicated test
jorgee 9dfaca0
fix issue pulling an existing commit with tag, drop issues and use ba…
jorgee 171fca7
fix tests
jorgee e8e7c5b
Add shared minimal clones
jorgee bbffdb7
replace revision map by bare repo, file mutex to prevent concurrent c…
jorgee 0c546f9
reduce complexity in list and drop commands
jorgee 009426f
refactor to keep AssetManager with minimal changes and make changes i…
jorgee 986df55
fix list and some tests
jorgee ad363ee
Refactor with Strategy pattern to support backward compatibility
jorgee c749f81
fix usage of token in github repository provider
jorgee 72cb2e1
Merge branch 'master' into mult_revisions_no_map
jorgee 2198f9b
fix tests
jorgee bffba57
fix test
jorgee dc997e2
multi-revision subdir instead of .nextflow
jorgee a15f150
more fixes
jorgee d0346ce
fix tests and add modify docs
jorgee af32c62
fix test
jorgee c0bb813
Apply suggestions in docs from code review
jorgee 3b332d4
Update docs/cli.md
jorgee 0dfa2f1
Cleanup
jorgee File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
262 changes: 262 additions & 0 deletions
262
adr/20251205-multi-revision-asset-management-strategy-pattern.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,262 @@ | ||
| # Multi-Revision Asset Management with Strategy Pattern | ||
|
|
||
| - Authors: Jorge Ejarque | ||
| - Status: Pending | ||
| - Deciders: Jorge Ejarque, Ben Sherman, Paolo Di Tommaso | ||
| - Date: 2025-12-05 | ||
| - Tags: scm, asset-management, multi-revision | ||
|
|
||
| ## Summary | ||
|
|
||
| Nextflow's asset management system has been refactored to support multiple revisions of the same pipeline concurrently through a bare repository approach with shared object storage, while maintaining backward compatibility with legacy direct-clone repositories using the Strategy design pattern. | ||
|
|
||
| ## Problem Statement | ||
|
|
||
| The original asset management system (`AssetManager`) cloned each pipeline directly to `~/.nextflow/assets/<org>/<project>/.git`, creating several limitations: | ||
|
|
||
| 1. **No concurrent multi-revision support**: Only one revision of a pipeline could be checked out at a time, preventing concurrent execution of different versions | ||
| 2. **Update conflicts**: Pulling updates while a pipeline was running could cause conflicts or corruption | ||
| 3. **Testing limitations**: Users couldn't easily test different versions of a pipeline side-by-side | ||
|
|
||
| The goal was to enable running multiple revisions of the same pipeline concurrently (e.g., production on v1.0, testing on v2.0-dev) while maintaining efficient disk usage through object sharing. | ||
|
|
||
| ## Goals or Decision Drivers | ||
|
|
||
| - **Concurrent multi-revision execution**: Must support running different revisions of the same pipeline simultaneously | ||
| - **Efficient disk usage**: Share Git objects between revisions to minimize storage overhead | ||
| - **Backward compatibility**: Must not break existing pipelines using the legacy direct-clone approach | ||
| - **API stability**: Maintain the existing `AssetManager` API for external consumers (K8s plugin, CLI commands, etc.) | ||
| - **Minimal migration impact**: Existing repositories should continue to work without user intervention | ||
| - **JGit compatibility**: Solution must work within JGit's capabilities to avoid relying on Git client installations | ||
| - **Atomic updates**: Downloading new revisions should not interfere with running pipelines | ||
|
|
||
| ## Non-goals | ||
|
|
||
| - **Migration of existing legacy repositories**: Legacy repos continue to work as-is; no forced migration | ||
| - **Native Git worktree support**: Due to JGit limitations, not using Git's worktree feature | ||
| - **Revision garbage collection**: No automatic cleanup of old revisions (users can manually drop) | ||
| - **Multi-hub support**: Still tied to a single repository provider per pipeline | ||
|
|
||
| ## Considered Options | ||
|
|
||
| ### Option 1: Bare Repository with Git Worktrees | ||
|
|
||
| Use Git's worktree feature to create multiple working directories from a single bare repository. | ||
|
|
||
| **Implementation**: | ||
| - One bare repository at `~/.nextflow/assets/<org>/<project>/.git` | ||
| - Multiple worktrees at `~/.nextflow/assets/<org>/<project>/<revision>/` | ||
|
|
||
| - Good, because it's the native Git solution for multiple checkouts | ||
| - Good, because worktrees are space-efficient | ||
| - Good, because Git handles all the complexity | ||
| - **Bad, because JGit doesn't support worktrees** (deal-breaker) | ||
| - Bad, because requires native Git installation | ||
|
|
||
| **Decision**: Rejected due to JGit incompatibility | ||
|
|
||
| ### Option 2: Bare Repository + Clones per Commit + Revision Map File | ||
|
|
||
| Use a bare repository for storage and create clones for each commit, tracking them in a separate file. | ||
|
|
||
| **Implementation**: | ||
| - Bare repository at `~/.nextflow/assets/<org>/<project>/.nextflow/bare_repo/` | ||
| - Clones at `~/.nextflow/assets/<org>/<project>/.nextflow/commits/<commit-sha>/` | ||
| - Revision map file at `~/.nextflow/assets/<org>/<project>/.nextflow/revisions.json` mapping revision names to commit SHAs | ||
|
|
||
| - Good, because it works with JGit | ||
| - Good, because bare repo reduces remote repository interactions to checkout commits | ||
| - Good, because explicit revision tracking | ||
| - Bad, because disk space as git objects replicated in clones | ||
| - Bad, because revision map file can become stale | ||
| - Bad, because requires file I/O for every revision lookup | ||
| - Bad, because potential race conditions on map file updates | ||
| - Bad, because adds complexity of maintaining external state | ||
|
|
||
| **Decision**: Initially implemented but later refined | ||
|
|
||
| ### Option 3: Bare Repository + Clones per Commit (Bare as Revision Map) | ||
|
|
||
| Similar to Option 2 but create eliminate the separate revision map file by using the bare repository itself as the source of truth. | ||
|
|
||
| **Implementation**: | ||
| - Bare repository at `~/.nextflow/assets/.repos/<org>/<project>/.nextflow/bare/` | ||
| - Shared clones at `~/.nextflow/assets/.repos/<org>/<project>/.nextflow/commits/<commit-sha>/` | ||
| - Use bare repository refs to resolve revisions to commit SHAs dynamically | ||
| - JGit alternates mechanism for object sharing | ||
|
|
||
| - Good, because no external state file to maintain | ||
| - Good, because bare repository is always in sync (fetched on updates) | ||
| - Good, because simpler and more reliable | ||
| - Good, because atomic updates (Git operations are atomic) | ||
| - Good, because works entirely within JGit | ||
| - Bad, because requires resolution on every access (minimal overhead) | ||
|
|
||
| **Decision**: Selected as the multi-revision implementation | ||
|
|
||
| ### Option 4: Strategy Pattern for Backward Compatibility | ||
|
|
||
| Instead of migrating existing repositories, use the Strategy pattern to support both legacy and multi-revision approaches. | ||
|
|
||
| **Implementation**: | ||
| - `AssetManager` as facade with unchanged public API | ||
| - `RepositoryStrategy` interface defining repository operations | ||
| - `LegacyRepositoryStrategy` for existing direct-clone behavior | ||
| - `MultiRevisionRepositoryStrategy` for new bare-repo approach | ||
| - Strategy selection based on environment variable or repository state detection | ||
|
|
||
| - Good, because zero migration needed | ||
| - Good, because maintains API compatibility | ||
| - Good, because allows gradual adoption | ||
| - Good, because isolates legacy code | ||
| - Good, because makes future strategies easy to add | ||
| - Neutral, because adds abstraction layer | ||
| - Bad, because increases codebase size initially | ||
|
|
||
| **Decision**: Selected for backward compatibility layer | ||
|
|
||
| ## Solution or decision outcome | ||
|
|
||
| Implemented **Option 3 (Bare Repository + Shared Clones per Commit)** for multi-revision support, combined with **Option 4 (Strategy Pattern)** for backward compatibility. Multi-revision is the default for new repositories, while legacy mode is available via `NXF_SCM_LEGACY` environment variable. | ||
|
|
||
| ## Rationale & discussion | ||
|
|
||
| ### Multi-Revision Implementation (Option 3) | ||
|
|
||
| The bare repository approach provides efficient multi-revision support: | ||
|
|
||
| ``` | ||
| ~/.nextflow/assets/.repos/nextflow-io/hello/ | ||
| ├── .nextflow/ | ||
| │ ├── bare_repo/ # Bare repository (shared objects) | ||
| │ │ ├── objects/ # All Git objects stored here | ||
| │ │ ├── refs/ | ||
| │ │ │ ├── heads/ | ||
| │ │ │ └── tags/ | ||
| │ │ └── config | ||
| │ │ | ||
| │ └── commits/ # Commit-specific clones | ||
| │ ├── abc123.../ # Clone for commit abc123 | ||
| │ │ └── .git/ | ||
| │ │ ├── objects/ # (uses alternates → bare_repo) | ||
| │ │ └── info/ | ||
| │ │ └── alternates # Points to bare_repo/objects | ||
| │ │ | ||
| │ └── def456.../ # Clone for commit def456 | ||
| │ └── .git/ | ||
| └── .git/ # Optional legacy repo (HYBRID state) | ||
| ``` | ||
|
|
||
| **Key mechanisms:** | ||
|
|
||
| 1. **Bare repository as source of truth**: The bare repo is fetched/updated from the remote, keeping refs current | ||
| 2. **Dynamic resolution**: Revisions (branch/tag names) are resolved to commit SHAs using the bare repo's refs | ||
| 3. **Object sharing**: Clones use Git alternates to reference the bare repo's objects, avoiding duplication | ||
| 4. **Atomic operations**: Each clone is independent; downloading a new revision doesn't affect existing ones | ||
| 5. **Lazy creation**: Clones are created on-demand when a specific revision is requested | ||
|
|
||
| **Advantages over revision map file:** | ||
| - No external state to maintain or keep in sync | ||
| - Bare repo fetch automatically updates all refs | ||
| - Resolution is simple: `bareRepo.resolve(revision)` returns commit SHA | ||
| - No race conditions on file updates | ||
| - Simpler code with fewer failure modes | ||
|
|
||
| ### Strategy Pattern Implementation (Option 4) | ||
|
|
||
| The Strategy pattern provides clean separation and backward compatibility: | ||
|
|
||
| ``` | ||
| ┌─────────────────────────┐ | ||
| │ AssetManager │ ← Public API (unchanged) | ||
| │ (Facade) │ | ||
| └───────────┬─────────────┘ | ||
| │ | ||
| │ delegates to | ||
| ▼ | ||
| ┌─────────────────────────┐ | ||
| │ RepositoryStrategy │ ← Interface | ||
| └───────────┬─────────────┘ | ||
| △ | ||
| │ implements | ||
| ┌───────┴────────┐ | ||
| │ │ | ||
| ┌───────────┐ ┌─────────────────┐ | ||
| │ Legacy │ │ MultiRevision │ ← Concrete strategies | ||
| │ Strategy │ │ Strategy │ | ||
| └───────────┘ └─────────────────┘ | ||
| ``` | ||
|
|
||
| **Strategy selection logic:** | ||
|
|
||
| 1. Check `NXF_SCM_LEGACY` environment variable → Use legacy if set | ||
| 2. Detect repository state: | ||
| - `UNINITIALIZED` (no repo) → Use multi-revision (default for new) | ||
| - `LEGACY_ONLY` (only `.git/`) → Use legacy (preserve existing) | ||
| - `BARE_ONLY` (only bare repo) → Use multi-revision | ||
| - `HYBRID` (both exist) → Prefer multi-revision | ||
|
|
||
| **Backward compatibility guarantees:** | ||
|
|
||
| - Existing repositories continue to work without changes | ||
| - `AssetManager` API remains identical | ||
| - CLI commands work with both strategies transparently | ||
| - Tests pass with minimal modifications | ||
| - No forced migration; users opt-in naturally when creating new repos | ||
|
|
||
| ### Hybrid State Handling | ||
|
|
||
| The system gracefully handles hybrid states where both legacy and multi-revision repositories coexist: | ||
|
|
||
| - **Detection**: `RepositoryStatus` enum represents all possible states | ||
| - **Fallback logic**: Multi-revision strategy can fall back to legacy repo for operations if needed | ||
| - **No conflicts**: Strategies are designed to coexist; operations target different directories | ||
| - **Explicit control**: Users can force a specific strategy via `setStrategyType()` | ||
|
|
||
| ### Migration Path | ||
|
|
||
| Users naturally migrate as they pull new revisions: | ||
|
|
||
| 1. **Existing users**: Continue with legacy repos (`LEGACY_ONLY` state detected) | ||
| 2. **New users**: Get multi-revision by default (`UNINITIALIZED` → multi-revision) | ||
| 3. **Opt-in migration**: Delete project directory to switch to multi-revision or pull with --migrate | ||
| 4. **Opt-out**: Set `NXF_SCM_LEGACY=true` to force legacy mode | ||
|
|
||
| ### Implementation Details | ||
|
|
||
| **Key classes:** | ||
|
|
||
| - `RepositoryStrategy`: Interface defining repository operations | ||
| - `AbstractRepositoryStrategy`: Base class with shared helper methods | ||
| - `LegacyRepositoryStrategy`: Direct clone implementation (original behavior) | ||
| - `MultiRevisionRepositoryStrategy`: Bare repo + shared clones implementation | ||
|
|
||
| **Critical methods:** | ||
|
|
||
| - `download()`: Equivalent for both strategies (legacy pulls, multi-revision creates shared clone) | ||
| - `getLocalPath()`: Returns appropriate working directory based on strategy | ||
| - `getGit()`: Returns appropriate Git instance (legacy git, bare git, or commit git) | ||
|
|
||
| ### Performance Characteristics | ||
|
|
||
| **Disk usage:** | ||
| - Legacy: ~100% per repository (full clone with all git objects) + Worktree | ||
| - Multi-revision: ~100% for bare + ~100K (.git with alternates) per revision + Worktree per revision | ||
|
|
||
| **Operation speed:** | ||
| - First download: Similar (both clone from remote) | ||
| - Additional revisions: Multi-revision faster (only fetches new objects once, creates cheap clones) | ||
| - Switching revisions: Multi-revision instant (different directories), legacy requires checkout | ||
|
|
||
| ### Known Limitations | ||
|
|
||
| - No automatic migration of legacy repositories | ||
| - Bare repository overhead even for users who only need one revision | ||
| - JGit alternates slightly more complex than worktrees | ||
| - Manual cleanup required for old revision clones | ||
|
|
||
| ## Links | ||
| - [GitHub Issue #2870 - Multiple revisions of the same pipeline for concurrent execution](https://github.com/nextflow-io/nextflow/issues/2870) | ||
| - [PR #6620 - Implementation of multiple revisions without revisions map](https://github.com/nextflow-io/nextflow/pull/6620) | ||
| - Related PRs implementing the multi-revision approach (linked in #6620) | ||
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -8,19 +8,68 @@ classDiagram | |
|
|
||
| class AssetManager { | ||
| project : String | ||
| localPath : File | ||
| mainScript : String | ||
| repositoryProvider : RepositoryProvider | ||
| provider : RepositoryProvider | ||
| strategy : RepositoryStrategy | ||
| hub : String | ||
| providerConfigs : List~ProviderConfig~ | ||
| } | ||
| AssetManager --* RepositoryProvider | ||
| class RepositoryStatus { | ||
| <<enumeration>> | ||
| UNINITIALIZED | ||
| LEGACY_ONLY | ||
| BARE_ONLY | ||
| HYBRID | ||
| } | ||
| class RepositoryStrategyType { | ||
| <<enumeration>> | ||
| LEGACY | ||
| MULTI_REVISION | ||
| } | ||
|
|
||
| AssetManager --> RepositoryStatus | ||
| AssetManager --> RepositoryStrategyType | ||
| AssetManager "1" --o "1" RepositoryStrategy | ||
| AssetManager "1" --o "1" RepositoryProvider | ||
| AssetManager "1" --* "*" ProviderConfig | ||
|
|
||
| class RepositoryStrategy { | ||
| <<interface>> | ||
| } | ||
| class AbstractRepositoryStrategy { | ||
| <<abstract>> | ||
| project : String | ||
| provider : RepositoryProvider | ||
| root : File | ||
| } | ||
| class LegacyRepositoryStrategy { | ||
| localPath : File | ||
| } | ||
| class MultiRevisionRepositoryStrategy { | ||
| revision : String | ||
| bareRepo : File | ||
| commitPath : File | ||
| revisionSubdir : File | ||
| } | ||
|
|
||
| RepositoryStrategy <|-- AbstractRepositoryStrategy | ||
| AbstractRepositoryStrategy <|-- LegacyRepositoryStrategy | ||
| AbstractRepositoryStrategy <|-- MultiRevisionRepositoryStrategy | ||
|
|
||
| class RepositoryProvider { | ||
| <<abstract>> | ||
| } | ||
|
|
||
| RepositoryStrategy --> RepositoryProvider | ||
|
|
||
| RepositoryProvider <|-- AzureRepositoryProvider | ||
| RepositoryProvider <|-- BitbucketRepositoryProvider | ||
| RepositoryProvider <|-- BitbucketServerRepositoryProvider | ||
| RepositoryProvider <|-- GiteaRepositoryProvider | ||
| RepositoryProvider <|-- GithubRepositoryProvider | ||
| RepositoryProvider <|-- GitlabRepositoryProvider | ||
| RepositoryProvider <|-- LocalRepositoryProvider | ||
|
|
||
| class FileMutex | ||
|
|
||
| MultiRevisionRepositoryStrategy --> FileMutex | ||
|
Comment on lines
+72
to
+75
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This seems like unnecessary detail for the dev diagrams |
||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"checked out" still seems appropriate here