SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
Pharo Sources in Git:
a Strawman
Dale Henrichs
Dr. Metacello
Nov. 2, 2016
Pharo Kernel Image
• 1 git repo for all kernel packages
• all packages same version
• tags for releases
• BaselineOfPharoKernel
• developers use it to update to latest kernel version
• and manage their own PharoKernel clone
• bugfixes and private extensions
Pharo Dev Image
• Assume that pharo dev image is built upon the minimal core
• Multiple git repos: 1 per independent functional unit
• one BaselineOfPharoDev that collects together the component
projects used to construct the Pharo Dev Image
• PharoKernel project referenced by tag pattern: `v7.?` which matches
all tags in PharoKernel repository starting with `7.`
• Similar tag name schemes used for other component projects
• maintain Pharo fork of projects that are not owned by Pharo team:
• Metacello, FileTree, etc.
Pharo kernel [60d52c5]
Git repository structure at image
build time
[SHA]
Image GitHub
Pharo
kernel
Pharo
dev
Metacello
git-cache
Pharo dev [f5e8170]
Metacello
[48f1da1]
W
E
B
Freshly downloaded image needs
to be properly connected to project
repos for development
Image
GitHub
Pharo
kernel
Pharo
dev
Metacello
git-cache
W
E
B
?
• similar problem exists today — Monticello packages
reference the Pharo repo (where package loaded from)
not the original development repo
Image
Pharo kernel [60d52c5]
Pharo dev [f5e8170]
Metacello
[48f1da1]
Metacello records SHA of commit at load
time and current repo, but not original
download repo
GitHub
Pharo
kernel
Pharo
dev
Metacello
W
E
BPharo kernel [60d52c5]
git-cache
Pharo dev [f5e8170]
Metacello
[48f1da1]
Connecting to proper repo involves executing the
following chunks of code
clone/lock/rehome
(roughly based on tODE implementation)
local image connection
complete
Image
Pharo kernel [60d52c5]
GitHub
Pharo
kernel
Pharo
dev
Metacello
…/shared
Pharo kernel [1f3f58a]
W
E
B
NOTE:
image SHA doesn’t match cloned SHA
Image
Pharo kernel [60d52c5]
GitHub
Pharo
kernel
Pharo
dev
Metacello
…/shared
Pharo kernel [1f3f58a]
W
E
B
• ‘version skew’ is not in and of itself a problem … but tools
are needed to inform user of the issue
• image state is preserved correctly — visual reminder that
image SHA does not match clone SHA
• once the repo is connected
• the developer can checkout the SHA that matches image
• or, load the latest version …
Common Occurrence
tODE Project List,
showing version skew
• tool makes it obvious that there is a potential problem
tODE Project List menu
• `skew diff` and `skew save` menu items support for
handling version skew
How does the clone tool know what to
clone?
(Metacello only records SHA)
• in tODE I use a project entry to specify what to clone and well-known
repository locations: `shared` and `image` to specify where to clone
In tODE, project enries served up
by GsDevKit_home `gh-pages`
For Pharo:
MetacelloProjectLoadSpec
• combo of tODE project entry, SmalltalkCI SCIMetacelloLoadSpec and
CatalogProject
• MetacelloProjectLoadSpec served up by catalog.pharo.org or a Pharo/Squeak/
GemStone oriented server or ???
MetacelloProjectLoadSpec
instance shipped in Pharo image
Image
Pharo kernel [60d52c5]
…/shared
loadSpec[
‘PharoKernel’,
‘git://github.com/pharo-
core/PharoKernel:v7.?/src',
…
] GitHub
Pharo
kernel
Pharo
dev
Metacello
W
E
B
• reference to primary project repo
clone/lock/rehome operation performed using
MetacelloProjectLoadSpec
(repo location updated to reflect clone location)
Image
Pharo kernel [60d52c5]
GitHub
Pharo
kernel
Pharo
dev
Metacello
…/shared
loadSpec[
‘PharoKernel’,
‘filetree://.../shared/
PharoKernel/src',
…
]
Pharo kernel [1f3f58a]
W
E
B
How do multiple images
share repos (load specs)?
Image GitHub
Pharo
kernel
Pharo
dev
Metacello
…/shared
Image Image
? ?
Pharo
kernel
W
E
B
loadSpec[]
How do multiple images
share repos (load specs)?
Image GitHub
Pharo
kernel
Pharo
dev
Metacello
…/shared
Image Image
Pharo
kernel
W
E
B
Pharo
kernel.ston
…/projects
loadSpec[] loadSpec[]loadSpec[]
• load spec STON file written to disk in /…/projects dir
• disk version of load spec object shared by all images
How to manage forked
projects
Image
Pharo kernel [60d52c5]
GitHub
Pharo
kernel
Pharo
dev
Metacello
Pharo
fork
loadSpec[
‘PharoKernel’,
‘git://github.com/pharo-
core/PharoKernel:v7.?/src',
…
]
GitHub/YOU
W
E
B
…/shared…/projects
How to manage forked projects
—edit load spec to reference fork—
—save to disk—
Image
Pharo kernel [60d52c5]
GitHub
Pharo
kernel
Pharo
dev
Metacello
Pharo
fork
loadSpec[
‘PharoKernel’,
‘git://github.com/YOU/
PharoFork:master/src',
…
]
GitHub/YOU
W
E
B
…/shared
Pharo
fork.ston
…/projects
How to manage forked projects
—clone/lock/rehome/share—
Image
Pharo kernel [60d52c5]
GitHub
Pharo
kernel
Pharo
dev
Metacello
Pharo
fork
loadSpec[
‘PharoKernel’,
‘filetree://.../shared/
PharoFork/src',
…
]
GitHub/YOU
…/shared
Pharo fork [85c552c]
W
E
B
Pharo
fork.ston
…/projects
Pharo kernel [1f3f58a]
Private Image Clone
—edit image load spec—
—don’t save to disk—
Image
Pharo kernel [60d52c5]
GitHub
Pharo
kernel
Pharo
dev
Metacello
Pharo
fork
loadSpec[
‘PharoKernel’,
‘filetree://.../shared/
PharoKernel/src',
…
]
GitHub/YOU
…/shared
Pharo fork [85c552c]Pharo
fork.ston
…/projects
W
E
B
Full Picture
Image
…/shared
Image Image
Pharo
fork
Pharo
fork.ston
…/projects
Metacello.sto
n
Pharo
dev.ston
loadSpec[] loadSpec[]loadSpec[]
catalog.pharo
.org
GitHub
Pharo
kernel
Pharo
dev
Metacello
Pharo
fork
GitHub/YOU
Pharo
kernel.ston
Pharo
kernel
W
E
B
General Caveats:
Don’ts
• git submodules and git subtrees are not as flexible as
Metacello project dependencies, so they are not needed
• Don’t put different platforms/releases on different branches
• FileTree is the anti-pattern and I wouldn’t do that again
• requires ‘cherry-picking’ to share common code
between branches
• use platform-specific packages in concert with platform-
common packages so that common and platform code
can be kept in sync common changes
General Caveats:
Dos
• Do use continuous release model as much as possible
• as long as there are no API breaking changes latest commit on `master` branch is the
RELEASE
• used by Metacello where I have by design avoided API breaking changes for ~7
years
• Use tags based on Semantic Versioning when API breaking changes cannot be avoided
• use the tag pattern matching in Metacello repository URL for referencing range of
versions
• could easily introduce new syntax in Metacello `git:` URL that specifies ranges of
versions
• clone of git repo using a tag leaves the clone without a branch —commit disallowed
until branch assigned

Mais conteúdo relacionado

Mais procurados

Pulp 3 - Simpler, Better, More awesome
Pulp 3 - Simpler, Better, More awesomePulp 3 - Simpler, Better, More awesome
Pulp 3 - Simpler, Better, More awesomeDennis Kliban
 
Advanced debugging  techniques in different environments
Advanced debugging  techniques in different environmentsAdvanced debugging  techniques in different environments
Advanced debugging  techniques in different environmentsAndrii Soldatenko
 
嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain艾鍗科技
 
Let the contribution begin (EST futures)
Let the contribution begin  (EST futures)Let the contribution begin  (EST futures)
Let the contribution begin (EST futures)SeongJae Park
 
Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020Puppet
 
Building robust and friendly command line applications in go
Building robust and friendly command line applications in goBuilding robust and friendly command line applications in go
Building robust and friendly command line applications in goAndrii Soldatenko
 
DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...
DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...
DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...Felipe Prado
 
Bgoug 2019.11 test your pl sql - not your patience
Bgoug 2019.11   test your pl sql - not your patienceBgoug 2019.11   test your pl sql - not your patience
Bgoug 2019.11 test your pl sql - not your patienceJacek Gebal
 
Wrangling 3rd Party Installers from Puppet
Wrangling 3rd Party Installers from PuppetWrangling 3rd Party Installers from Puppet
Wrangling 3rd Party Installers from PuppetPuppet
 
Virtual Bolt Workshop, 5 May 2020
Virtual Bolt Workshop, 5 May 2020Virtual Bolt Workshop, 5 May 2020
Virtual Bolt Workshop, 5 May 2020Puppet
 
Toolbox for Selenium Tests in Java: WebDriverManager and Selenium-Jupiter
Toolbox for Selenium Tests in Java: WebDriverManager and Selenium-JupiterToolbox for Selenium Tests in Java: WebDriverManager and Selenium-Jupiter
Toolbox for Selenium Tests in Java: WebDriverManager and Selenium-JupiterBoni García
 
Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to GriffonJames Williams
 
Makefile Generation From Autotools
Makefile Generation From AutotoolsMakefile Generation From Autotools
Makefile Generation From AutotoolsWaqqas Jabbar
 
Work shop - an introduction to the docker ecosystem
Work shop - an introduction to the docker ecosystemWork shop - an introduction to the docker ecosystem
Work shop - an introduction to the docker ecosystemJoão Pedro Harbs
 
Devoxx France: Développement JAVA avec un IDE dans le Cloud: Yes we can !
Devoxx France: Développement JAVA avec un IDE dans le Cloud: Yes we can !Devoxx France: Développement JAVA avec un IDE dans le Cloud: Yes we can !
Devoxx France: Développement JAVA avec un IDE dans le Cloud: Yes we can !Florent BENOIT
 
From gcc to the autotools
From gcc to the autotoolsFrom gcc to the autotools
From gcc to the autotoolsThierry Gayet
 

Mais procurados (18)

Pulp 3 - Simpler, Better, More awesome
Pulp 3 - Simpler, Better, More awesomePulp 3 - Simpler, Better, More awesome
Pulp 3 - Simpler, Better, More awesome
 
Advanced debugging  techniques in different environments
Advanced debugging  techniques in different environmentsAdvanced debugging  techniques in different environments
Advanced debugging  techniques in different environments
 
嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain
 
Let the contribution begin (EST futures)
Let the contribution begin  (EST futures)Let the contribution begin  (EST futures)
Let the contribution begin (EST futures)
 
Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020
 
Building robust and friendly command line applications in go
Building robust and friendly command line applications in goBuilding robust and friendly command line applications in go
Building robust and friendly command line applications in go
 
DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...
DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...
DEF CON 27 - workshop - ISAAC EVANS - discover exploit and eradicate entire v...
 
Bgoug 2019.11 test your pl sql - not your patience
Bgoug 2019.11   test your pl sql - not your patienceBgoug 2019.11   test your pl sql - not your patience
Bgoug 2019.11 test your pl sql - not your patience
 
Wrangling 3rd Party Installers from Puppet
Wrangling 3rd Party Installers from PuppetWrangling 3rd Party Installers from Puppet
Wrangling 3rd Party Installers from Puppet
 
Virtual Bolt Workshop, 5 May 2020
Virtual Bolt Workshop, 5 May 2020Virtual Bolt Workshop, 5 May 2020
Virtual Bolt Workshop, 5 May 2020
 
Toolbox for Selenium Tests in Java: WebDriverManager and Selenium-Jupiter
Toolbox for Selenium Tests in Java: WebDriverManager and Selenium-JupiterToolbox for Selenium Tests in Java: WebDriverManager and Selenium-Jupiter
Toolbox for Selenium Tests in Java: WebDriverManager and Selenium-Jupiter
 
vvvvReadme
vvvvReadmevvvvReadme
vvvvReadme
 
Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to Griffon
 
Makefile Generation From Autotools
Makefile Generation From AutotoolsMakefile Generation From Autotools
Makefile Generation From Autotools
 
LabDocumentation
LabDocumentationLabDocumentation
LabDocumentation
 
Work shop - an introduction to the docker ecosystem
Work shop - an introduction to the docker ecosystemWork shop - an introduction to the docker ecosystem
Work shop - an introduction to the docker ecosystem
 
Devoxx France: Développement JAVA avec un IDE dans le Cloud: Yes we can !
Devoxx France: Développement JAVA avec un IDE dans le Cloud: Yes we can !Devoxx France: Développement JAVA avec un IDE dans le Cloud: Yes we can !
Devoxx France: Développement JAVA avec un IDE dans le Cloud: Yes we can !
 
From gcc to the autotools
From gcc to the autotoolsFrom gcc to the autotools
From gcc to the autotools
 

Semelhante a Pharo Sources in Git

VM vs Docker-Based Pipelines
VM vs Docker-Based PipelinesVM vs Docker-Based Pipelines
VM vs Docker-Based PipelinesCodefresh
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbtFabio Fumarola
 
Faster Container Image Distribution on a Variety of Tools with Lazy Pulling
Faster Container Image Distribution on a Variety of Tools with Lazy PullingFaster Container Image Distribution on a Variety of Tools with Lazy Pulling
Faster Container Image Distribution on a Variety of Tools with Lazy PullingKohei Tokunaga
 
PharoDAYS 2015: Publishing libraries and frameworks by Sven Van Caekenberghe
PharoDAYS 2015: Publishing libraries and frameworks by Sven Van CaekenberghePharoDAYS 2015: Publishing libraries and frameworks by Sven Van Caekenberghe
PharoDAYS 2015: Publishing libraries and frameworks by Sven Van CaekenberghePharo
 
CSE 390 Lecture 9 - Version Control with GIT
CSE 390 Lecture 9 - Version Control with GITCSE 390 Lecture 9 - Version Control with GIT
CSE 390 Lecture 9 - Version Control with GITPouriaQashqai1
 
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)Ahmed El-Arabawy
 
Startup Containers in Lightning Speed with Lazy Image Distribution
Startup Containers in Lightning Speed with Lazy Image DistributionStartup Containers in Lightning Speed with Lazy Image Distribution
Startup Containers in Lightning Speed with Lazy Image DistributionKohei Tokunaga
 
Cape Cod Web Technology Meetup - 3
Cape Cod Web Technology Meetup - 3Cape Cod Web Technology Meetup - 3
Cape Cod Web Technology Meetup - 3Asher Martin
 
Puppet control-repo 
to the next level
Puppet control-repo 
to the next levelPuppet control-repo 
to the next level
Puppet control-repo 
to the next levelAlessandro Franceschi
 
SF Gradle Meetup - Netflix OSS
SF Gradle Meetup - Netflix OSSSF Gradle Meetup - Netflix OSS
SF Gradle Meetup - Netflix OSSJustin Ryan
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Martin Bergljung
 
Liferay Configuration and Customization
Liferay Configuration and CustomizationLiferay Configuration and Customization
Liferay Configuration and CustomizationThành Nguyễn
 
PHP Dependency Management with Composer
PHP Dependency Management with ComposerPHP Dependency Management with Composer
PHP Dependency Management with ComposerAdam Englander
 
FILEgrain: Transport-Agnostic, Fine-Grained Content-Addressable Container Ima...
FILEgrain: Transport-Agnostic, Fine-Grained Content-Addressable Container Ima...FILEgrain: Transport-Agnostic, Fine-Grained Content-Addressable Container Ima...
FILEgrain: Transport-Agnostic, Fine-Grained Content-Addressable Container Ima...Akihiro Suda
 
DockerCon SF 2015: Maintaining the official node.js docker image
DockerCon SF 2015: Maintaining the official node.js docker imageDockerCon SF 2015: Maintaining the official node.js docker image
DockerCon SF 2015: Maintaining the official node.js docker imageDocker, Inc.
 
Eclipse Neon Webinar - Docker Tooling for Developers
Eclipse Neon Webinar - Docker Tooling for DevelopersEclipse Neon Webinar - Docker Tooling for Developers
Eclipse Neon Webinar - Docker Tooling for DevelopersXavier Coulon
 

Semelhante a Pharo Sources in Git (20)

VM vs Docker-Based Pipelines
VM vs Docker-Based PipelinesVM vs Docker-Based Pipelines
VM vs Docker-Based Pipelines
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
 
Faster Container Image Distribution on a Variety of Tools with Lazy Pulling
Faster Container Image Distribution on a Variety of Tools with Lazy PullingFaster Container Image Distribution on a Variety of Tools with Lazy Pulling
Faster Container Image Distribution on a Variety of Tools with Lazy Pulling
 
PharoDAYS 2015: Publishing libraries and frameworks by Sven Van Caekenberghe
PharoDAYS 2015: Publishing libraries and frameworks by Sven Van CaekenberghePharoDAYS 2015: Publishing libraries and frameworks by Sven Van Caekenberghe
PharoDAYS 2015: Publishing libraries and frameworks by Sven Van Caekenberghe
 
Docker for Developers
Docker for DevelopersDocker for Developers
Docker for Developers
 
CSE 390 Lecture 9 - Version Control with GIT
CSE 390 Lecture 9 - Version Control with GITCSE 390 Lecture 9 - Version Control with GIT
CSE 390 Lecture 9 - Version Control with GIT
 
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
 
Startup Containers in Lightning Speed with Lazy Image Distribution
Startup Containers in Lightning Speed with Lazy Image DistributionStartup Containers in Lightning Speed with Lazy Image Distribution
Startup Containers in Lightning Speed with Lazy Image Distribution
 
Cape Cod Web Technology Meetup - 3
Cape Cod Web Technology Meetup - 3Cape Cod Web Technology Meetup - 3
Cape Cod Web Technology Meetup - 3
 
Session 2
Session 2Session 2
Session 2
 
Session 2
Session 2Session 2
Session 2
 
Puppet control-repo 
to the next level
Puppet control-repo 
to the next levelPuppet control-repo 
to the next level
Puppet control-repo 
to the next level
 
SF Gradle Meetup - Netflix OSS
SF Gradle Meetup - Netflix OSSSF Gradle Meetup - Netflix OSS
SF Gradle Meetup - Netflix OSS
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
 
Liferay Configuration and Customization
Liferay Configuration and CustomizationLiferay Configuration and Customization
Liferay Configuration and Customization
 
PHP Dependency Management with Composer
PHP Dependency Management with ComposerPHP Dependency Management with Composer
PHP Dependency Management with Composer
 
FILEgrain: Transport-Agnostic, Fine-Grained Content-Addressable Container Ima...
FILEgrain: Transport-Agnostic, Fine-Grained Content-Addressable Container Ima...FILEgrain: Transport-Agnostic, Fine-Grained Content-Addressable Container Ima...
FILEgrain: Transport-Agnostic, Fine-Grained Content-Addressable Container Ima...
 
Pharo3 at Fosdem
Pharo3 at FosdemPharo3 at Fosdem
Pharo3 at Fosdem
 
DockerCon SF 2015: Maintaining the official node.js docker image
DockerCon SF 2015: Maintaining the official node.js docker imageDockerCon SF 2015: Maintaining the official node.js docker image
DockerCon SF 2015: Maintaining the official node.js docker image
 
Eclipse Neon Webinar - Docker Tooling for Developers
Eclipse Neon Webinar - Docker Tooling for DevelopersEclipse Neon Webinar - Docker Tooling for Developers
Eclipse Neon Webinar - Docker Tooling for Developers
 

Mais de Philippe Back

#Pharo Days 2016 Data Formats and Protocols
#Pharo Days 2016 Data Formats and Protocols#Pharo Days 2016 Data Formats and Protocols
#Pharo Days 2016 Data Formats and ProtocolsPhilippe Back
 
#Pharo Days 2016 Reflectivity
#Pharo Days 2016 Reflectivity#Pharo Days 2016 Reflectivity
#Pharo Days 2016 ReflectivityPhilippe Back
 
#Pharo Days 2016 Community
#Pharo Days 2016 Community#Pharo Days 2016 Community
#Pharo Days 2016 CommunityPhilippe Back
 
#Pharo days 2016 Conference Welcome
#Pharo days 2016 Conference Welcome#Pharo days 2016 Conference Welcome
#Pharo days 2016 Conference WelcomePhilippe Back
 
Sparx Systems : High Octane's offering
Sparx Systems : High Octane's offeringSparx Systems : High Octane's offering
Sparx Systems : High Octane's offeringPhilippe Back
 
Ivar Jacobson International Introduction
Ivar Jacobson International IntroductionIvar Jacobson International Introduction
Ivar Jacobson International IntroductionPhilippe Back
 

Mais de Philippe Back (6)

#Pharo Days 2016 Data Formats and Protocols
#Pharo Days 2016 Data Formats and Protocols#Pharo Days 2016 Data Formats and Protocols
#Pharo Days 2016 Data Formats and Protocols
 
#Pharo Days 2016 Reflectivity
#Pharo Days 2016 Reflectivity#Pharo Days 2016 Reflectivity
#Pharo Days 2016 Reflectivity
 
#Pharo Days 2016 Community
#Pharo Days 2016 Community#Pharo Days 2016 Community
#Pharo Days 2016 Community
 
#Pharo days 2016 Conference Welcome
#Pharo days 2016 Conference Welcome#Pharo days 2016 Conference Welcome
#Pharo days 2016 Conference Welcome
 
Sparx Systems : High Octane's offering
Sparx Systems : High Octane's offeringSparx Systems : High Octane's offering
Sparx Systems : High Octane's offering
 
Ivar Jacobson International Introduction
Ivar Jacobson International IntroductionIvar Jacobson International Introduction
Ivar Jacobson International Introduction
 

Último

AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 

Último (20)

AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 

Pharo Sources in Git

  • 1. Pharo Sources in Git: a Strawman Dale Henrichs Dr. Metacello Nov. 2, 2016
  • 2. Pharo Kernel Image • 1 git repo for all kernel packages • all packages same version • tags for releases • BaselineOfPharoKernel • developers use it to update to latest kernel version • and manage their own PharoKernel clone • bugfixes and private extensions
  • 3. Pharo Dev Image • Assume that pharo dev image is built upon the minimal core • Multiple git repos: 1 per independent functional unit • one BaselineOfPharoDev that collects together the component projects used to construct the Pharo Dev Image • PharoKernel project referenced by tag pattern: `v7.?` which matches all tags in PharoKernel repository starting with `7.` • Similar tag name schemes used for other component projects • maintain Pharo fork of projects that are not owned by Pharo team: • Metacello, FileTree, etc.
  • 4. Pharo kernel [60d52c5] Git repository structure at image build time [SHA] Image GitHub Pharo kernel Pharo dev Metacello git-cache Pharo dev [f5e8170] Metacello [48f1da1] W E B
  • 5. Freshly downloaded image needs to be properly connected to project repos for development Image GitHub Pharo kernel Pharo dev Metacello git-cache W E B ? • similar problem exists today — Monticello packages reference the Pharo repo (where package loaded from) not the original development repo
  • 6. Image Pharo kernel [60d52c5] Pharo dev [f5e8170] Metacello [48f1da1] Metacello records SHA of commit at load time and current repo, but not original download repo GitHub Pharo kernel Pharo dev Metacello W E BPharo kernel [60d52c5] git-cache Pharo dev [f5e8170] Metacello [48f1da1]
  • 7. Connecting to proper repo involves executing the following chunks of code clone/lock/rehome (roughly based on tODE implementation)
  • 8. local image connection complete Image Pharo kernel [60d52c5] GitHub Pharo kernel Pharo dev Metacello …/shared Pharo kernel [1f3f58a] W E B
  • 9. NOTE: image SHA doesn’t match cloned SHA Image Pharo kernel [60d52c5] GitHub Pharo kernel Pharo dev Metacello …/shared Pharo kernel [1f3f58a] W E B
  • 10. • ‘version skew’ is not in and of itself a problem … but tools are needed to inform user of the issue • image state is preserved correctly — visual reminder that image SHA does not match clone SHA • once the repo is connected • the developer can checkout the SHA that matches image • or, load the latest version … Common Occurrence
  • 11. tODE Project List, showing version skew • tool makes it obvious that there is a potential problem
  • 12. tODE Project List menu • `skew diff` and `skew save` menu items support for handling version skew
  • 13. How does the clone tool know what to clone? (Metacello only records SHA) • in tODE I use a project entry to specify what to clone and well-known repository locations: `shared` and `image` to specify where to clone
  • 14. In tODE, project enries served up by GsDevKit_home `gh-pages`
  • 15. For Pharo: MetacelloProjectLoadSpec • combo of tODE project entry, SmalltalkCI SCIMetacelloLoadSpec and CatalogProject • MetacelloProjectLoadSpec served up by catalog.pharo.org or a Pharo/Squeak/ GemStone oriented server or ???
  • 16. MetacelloProjectLoadSpec instance shipped in Pharo image Image Pharo kernel [60d52c5] …/shared loadSpec[ ‘PharoKernel’, ‘git://github.com/pharo- core/PharoKernel:v7.?/src', … ] GitHub Pharo kernel Pharo dev Metacello W E B • reference to primary project repo
  • 17. clone/lock/rehome operation performed using MetacelloProjectLoadSpec (repo location updated to reflect clone location) Image Pharo kernel [60d52c5] GitHub Pharo kernel Pharo dev Metacello …/shared loadSpec[ ‘PharoKernel’, ‘filetree://.../shared/ PharoKernel/src', … ] Pharo kernel [1f3f58a] W E B
  • 18. How do multiple images share repos (load specs)? Image GitHub Pharo kernel Pharo dev Metacello …/shared Image Image ? ? Pharo kernel W E B loadSpec[]
  • 19. How do multiple images share repos (load specs)? Image GitHub Pharo kernel Pharo dev Metacello …/shared Image Image Pharo kernel W E B Pharo kernel.ston …/projects loadSpec[] loadSpec[]loadSpec[] • load spec STON file written to disk in /…/projects dir • disk version of load spec object shared by all images
  • 20. How to manage forked projects Image Pharo kernel [60d52c5] GitHub Pharo kernel Pharo dev Metacello Pharo fork loadSpec[ ‘PharoKernel’, ‘git://github.com/pharo- core/PharoKernel:v7.?/src', … ] GitHub/YOU W E B …/shared…/projects
  • 21. How to manage forked projects —edit load spec to reference fork— —save to disk— Image Pharo kernel [60d52c5] GitHub Pharo kernel Pharo dev Metacello Pharo fork loadSpec[ ‘PharoKernel’, ‘git://github.com/YOU/ PharoFork:master/src', … ] GitHub/YOU W E B …/shared Pharo fork.ston …/projects
  • 22. How to manage forked projects —clone/lock/rehome/share— Image Pharo kernel [60d52c5] GitHub Pharo kernel Pharo dev Metacello Pharo fork loadSpec[ ‘PharoKernel’, ‘filetree://.../shared/ PharoFork/src', … ] GitHub/YOU …/shared Pharo fork [85c552c] W E B Pharo fork.ston …/projects
  • 23. Pharo kernel [1f3f58a] Private Image Clone —edit image load spec— —don’t save to disk— Image Pharo kernel [60d52c5] GitHub Pharo kernel Pharo dev Metacello Pharo fork loadSpec[ ‘PharoKernel’, ‘filetree://.../shared/ PharoKernel/src', … ] GitHub/YOU …/shared Pharo fork [85c552c]Pharo fork.ston …/projects W E B
  • 24. Full Picture Image …/shared Image Image Pharo fork Pharo fork.ston …/projects Metacello.sto n Pharo dev.ston loadSpec[] loadSpec[]loadSpec[] catalog.pharo .org GitHub Pharo kernel Pharo dev Metacello Pharo fork GitHub/YOU Pharo kernel.ston Pharo kernel W E B
  • 25. General Caveats: Don’ts • git submodules and git subtrees are not as flexible as Metacello project dependencies, so they are not needed • Don’t put different platforms/releases on different branches • FileTree is the anti-pattern and I wouldn’t do that again • requires ‘cherry-picking’ to share common code between branches • use platform-specific packages in concert with platform- common packages so that common and platform code can be kept in sync common changes
  • 26. General Caveats: Dos • Do use continuous release model as much as possible • as long as there are no API breaking changes latest commit on `master` branch is the RELEASE • used by Metacello where I have by design avoided API breaking changes for ~7 years • Use tags based on Semantic Versioning when API breaking changes cannot be avoided • use the tag pattern matching in Metacello repository URL for referencing range of versions • could easily introduce new syntax in Metacello `git:` URL that specifies ranges of versions • clone of git repo using a tag leaves the clone without a branch —commit disallowed until branch assigned