Dependency Management With Pinto

2,101 views
1,984 views

Published on

Published in: Technology, Art & Photos
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,101
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
19
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Dependency Management With Pinto

    1. 1. Dependency Management With Pinto Jeffrey Thalhammer thaljef@cpan.org YAPC::NA June 15, 2012
    2. 2. CPAN Is HeavenTens of thousands ofmodules for everypurpose imaginableLots of ser vices fortesting, bug tracking,ratings, forumsAwesome tool chainfor building, testing,installing
    3. 3. CPAN Is HellThe CPAN is notstableDevelopersconstantly addingand removing stuffSometimes the codeis brokenTool chain expectsbackwardcompatibility
    4. 4. Unintended ConsequencesAvoidingdependenciesAvoiding upgradesShared resources &monolithic systemsUnreproducibleenvironments
    5. 5. Combating The Problem“Just stash the site_perl directory in the VCS”BrittleNot portableCan’t smoke itHard to evolve
    6. 6. Combating The Problem “Just stash the distribution tarballs in the VCS”Slightly less brittlePortableSmokableStill icky
    7. 7. CPAN::Site & CPAN::Mini• Snapshots of the CPAN• Solves the stability problem• Still clunky
    8. 8. More Shops Are Writing CPAN- style Dists• M::B and EU::MM more commonplace• Dist::Zilla makes the development fun• cpanmmakes the deployment easy• DarkPANs proliferate
    9. 9. Lots of DarkPAN Tools Emerge• CPAN::Mini::Inject• MyCPAN::App::DPAN• CPAN::Dark• OrePAN
    10. 10. Pinto Is BornHad built 3 privateCPANSAlways required somehacksNot happy with theresultStarted form scratch
    11. 11. What is Pinto? An extensible tool for managingdependencies via a CPAN-like repository
    12. 12. ContextYou have an app called My-AppThe app contains package My::AppThe app requires URI (latest is 1.59)
    13. 13. Creating A Repository
    14. 14. Creating A Repositorypinto --root=~/mypan init
    15. 15. Creating A Repositorypinto --root=~/mypan init path to the repository
    16. 16. Creating A Repositorypinto --root=~/mypan init “init” command
    17. 17. Creating A Repositorypinto --root=~/mypan init
    18. 18. Inspecting The Repositorypinto --root=~/mypan list
    19. 19. Inspecting The Repositorypinto --root=~/mypan list “list” command
    20. 20. Inspecting The Repositorypinto --root=~/mypan list path to the repository
    21. 21. Inspecting The Repositorypinto --root=~/mypan list
    22. 22. A Shortcutpinto --root=~/mypan list
    23. 23. A Shortcutpinto --root=~/mypan list pinto -r ~/mypan list
    24. 24. A Shortcut pinto --root=~/mypan list pinto -r ~/mypan listexport PINTO_REPOSITORY_ROOT=~/mypan
    25. 25. A Shortcut pinto --root=~/mypan list pinto -r ~/mypan listexport PINTO_REPOSITORY_ROOT=~/mypan pinto list
    26. 26. Fetching Dependencies
    27. 27. Fetching Dependenciespinto pull URI
    28. 28. Fetching Dependenciespinto pull URI“pull” command
    29. 29. Fetching Dependenciespinto pull URI package name
    30. 30. Fetching Dependenciespinto pull URI
    31. 31. What Did We Get?
    32. 32. What Did We Get?pinto list
    33. 33. What Did We Get? pinto listrf URI 1.59 GAAS/URI-1.59.tar.gzrf URI::Escape 3.31 GAAS/URI-1.59.tar.gzrf URI::Heuristic 4.20 GAAS/URI-1.59.tar.gzrf URI::IRI 0 GAAS/URI-1.59.tar.gzrf URI::QueryParam 0 GAAS/URI-1.59.tar.gzrf URI::Split 0 GAAS/URI-1.59.tar.gz...
    34. 34. Understanding The Listingrf URI 1.59 GAAS/URI-1.59.tar.gz
    35. 35. Understanding The Listingrf URI 1.59 GAAS/URI-1.59.tar.gz “r” means release dist
    36. 36. Understanding The Listingrf URI 1.59 GAAS/URI-1.59.tar.gz “f” means a foreign dist
    37. 37. Understanding The Listingrf URI 1.59 GAAS/URI-1.59.tar.gz The package name
    38. 38. Understanding The Listingrf URI 1.59 GAAS/URI-1.59.tar.gz The package version number
    39. 39. Understanding The Listingrf URI 1.59 GAAS/URI-1.59.tar.gz The distribution’s author ID
    40. 40. Understanding The Listingrf URI 1.59 GAAS/URI-1.59.tar.gz The distribution archive
    41. 41. Understanding The Listingrf URI 1.59 GAAS/URI-1.59.tar.gz
    42. 42. Injecting Your Own Distribution
    43. 43. Injecting Your Own Distributionpinto add some/dir/My-App-1.0.tar.gz
    44. 44. Injecting Your Own Distributionpinto add some/dir/My-App-1.0.tar.gz “ add” command
    45. 45. Injecting Your Own Distributionpinto add some/dir/My-App-1.0.tar.gz Path to local dist archive
    46. 46. Injecting Your Own Distributionpinto add some/dir/My-App-1.0.tar.gz
    47. 47. Injecting Your Own Distributionpinto add some/dir/My-App-1.0.tar.gz pinto list
    48. 48. Injecting Your Own Distribution pinto add some/dir/My-App-1.0.tar.gz pinto listrl My::App 1.0 YOU/My-App-1.0.tar.gzrf URI 1.59 GAAS/URI-1.59.tar.gzrf URI::Escape 3.31 GAAS/URI-1.59.tar.gz...
    49. 49. Installing With cpan$ cpancpan[1]> o conf urllist file://$HOME/mypancpan[2]> install My::App
    50. 50. Installing With cpan$ cpancpan[1]> o conf urllist file://$HOME/mypancpan[2]> install My::App point to your repository
    51. 51. Installing With cpan$ cpancpan[1]> o conf urllist file://$HOME/mypancpan[2]> install My::App
    52. 52. Installing With cpanm
    53. 53. Installing With cpanmcpanm --mirror file://$HOME/mypan --mirror-only My::App
    54. 54. Installing With cpanmcpanm --mirror file://$HOME/mypan --mirror-only My::App point to your repository
    55. 55. Installing With cpanmcpanm --mirror file://$HOME/mypan --mirror-only My::App do not fall back to CPAN
    56. 56. Installing With cpanmcpanm --mirror file://$HOME/mypan --mirror-only My::App
    57. 57. Installing With pinto
    58. 58. Installing With pintopinto install My::App
    59. 59. Installing With pintopinto install My::App “install” command
    60. 60. Installing With pintopinto install My::App
    61. 61. Upgrading Dependencies
    62. 62. Upgrading Dependenciespinto pull URI~1.60
    63. 63. Upgrading Dependenciespinto pull URI~1.60 “pull” command
    64. 64. Upgrading Dependencies pinto pull URI~1.60Package name and minimum version
    65. 65. Upgrading Dependenciespinto pull GAAS/URI-1.60.tar.gz
    66. 66. Upgrading Dependenciespinto pull GAAS/URI-1.60.tar.gz pinto list
    67. 67. Upgrading Dependencies pinto pull GAAS/URI-1.60.tar.gz pinto listrl My::App 1.0 YOU/My-App-1.0.tar.gzrf URI 1.60 GAAS/URI-1.60.tar.gzrf URI::Escape 3.32 GAAS/URI-1.60.tar.gzrf URI::Heuristic 4.20 GAAS/URI-1.60.tar.gz...
    68. 68. Working With Stacks
    69. 69. What Is A Stack?A named mapping from packagenames to distribution archivesConceptually equivalent to the02packages.details.txt fileIn a CPAN, there is only one“stack”, and it usually containsonly latest package versionsBut a Pinto repository can havemultiple stacks, that containarbitrary package versions
    70. 70. The Default StackEvery Pinto repository has abuilt-in stack called “init”It is the default stack for alloperationsYou can change the defaultstack
    71. 71. Creating A Stack
    72. 72. Creating A Stackpinto new upgrades
    73. 73. Creating A Stackpinto new upgrades“new” command
    74. 74. Creating A Stackpinto new upgrades stack name
    75. 75. Creating A Stack pinto new upgradespinto copy init upgrades
    76. 76. Creating A Stack pinto new upgradespinto copy init upgrades “copy” command
    77. 77. Creating A Stack pinto new upgradespinto copy init upgrades from stack
    78. 78. Creating A Stack pinto new upgradespinto copy init upgrades to stack
    79. 79. Creating A Stack pinto new upgradespinto copy init upgrades
    80. 80. Upgrading On A Stackpinto pull --stack=upgrades URI~1.62
    81. 81. Upgrading On A Stackpinto pull --stack=upgrades URI~1.62 “pull” command
    82. 82. Upgrading On A Stackpinto pull --stack=upgrades URI~1.62 specify the stack name
    83. 83. Upgrading On A Stackpinto pull --stack=upgrades URI~1.62 package name and version
    84. 84. Upgrading On A Stackpinto pull --stack=upgrades URI~1.62
    85. 85. Upgrading On A Stackpinto pull --stack=upgrades URI~1.62 pinto list --stack=upgrades
    86. 86. Upgrading On A Stackpinto pull --stack=upgrades URI~1.62 pinto list --stack=upgrades specify the stack name
    87. 87. Upgrading On A Stack pinto pull --stack=upgrades URI~1.62 pinto list --stack=upgradesrl My::App 1.0 YOU/My-App-1.0.tar.gzrf URI 1.62 GAAS/URI-1.62.tar.gzrf URI::Escape 3.32 GAAS/URI-1.62.tar.gzrf URI::Heuristic 4.20 GAAS/URI-1.62.tar.gz...
    88. 88. Looking Across Stackspinto list --stack=@ -P=URI
    89. 89. Looking Across Stackspinto list --stack=@ -P=URI special stack “ @”
    90. 90. Looking Across Stackspinto list --stack=@ -P=URI only packages matching %URI%
    91. 91. Looking Across Stacks pinto list --stack=@ -P=URIrf init URI 1.60 GAAS/URI-1.60.tar.gzrf upgrades URI 1.62 GAAS/URI-1.62.tar.gz...
    92. 92. Installing From A Stackpinto install --stack=upgrades My::App
    93. 93. Installing From A Stackpinto install --stack=upgrades My::App “install” command
    94. 94. Installing From A Stackpinto install --stack=upgrades My::App specify stack name
    95. 95. Installing From A Stackpinto install --stack=upgrades My::App package name
    96. 96. Installing From A Stackpinto install --stack=upgrades My::App
    97. 97. Merging Stackspinto merge upgrades init
    98. 98. Merging Stackspinto merge upgrades init “merge” command
    99. 99. Merging Stackspinto merge upgrades init from stack
    100. 100. Merging Stackspinto merge upgrades init to stack
    101. 101. Merging Stackspinto merge upgrades init
    102. 102. Merging Stacks pinto merge upgrades initrf init URI 1.62 GAAS/URI-1.62.tar.gzrf upgrades URI 1.62 GAAS/URI-1.62.tar.gz...
    103. 103. Why Use Stacks?• Stacks for upgrades• Stacks for each feature• Stacks for dev/qa/prod• Stacks for each product• Stacks for each perl version• Stacks for each customer
    104. 104. Working With Pins
    105. 105. What Is A Pin?Fixes a particularpackage & version tostackCannot be upgradedor downgradedUntil you unpin it
    106. 106. Pinning A Packagepinto pin URI
    107. 107. Pinning A Packagepinto pin URI “pin” command
    108. 108. Pinning A Packagepinto pin URI package name
    109. 109. Pinning A Packagepinto pin URI
    110. 110. Pinning A Packagepinto pin URI pinto list
    111. 111. Pinning A Package pinto pin URI pinto listrf+ URI 1.59 GAAS/URI-1.59.tar.gzrf+ URI::Escape 3.31 GAAS/URI-1.59.tar.gzrf+ URI::Heuristic 4.20 GAAS/URI-1.59.tar.gz
    112. 112. Pinning A Package pinto pin URI pinto listrf+ URI 1.59 GAAS/URI-1.59.tar.gzrf+ URI::Escape 3.31 GAAS/URI-1.59.tar.gzrf+ URI::Heuristic 4.20 GAAS/URI-1.59.tar.gz “+” indicates a pin
    113. 113. Pinning A Package pinto pin URI pinto listrf+ URI 1.59 GAAS/URI-1.59.tar.gzrf+ URI::Escape 3.31 GAAS/URI-1.59.tar.gzrf+ URI::Heuristic 4.20 GAAS/URI-1.59.tar.gz
    114. 114. Pinning A Package
    115. 115. Pinning A PackageSuppose you want to use Catalyst
    116. 116. Pinning A PackageSuppose you want to use CatalystAnd Catalyst requires Plack 0.99
    117. 117. Pinning A PackageSuppose you want to use CatalystAnd Catalyst requires Plack 0.99And Plack 0.99 requires HTTP::Request 6.03
    118. 118. Pinning A PackageSuppose you want to use CatalystAnd Catalyst requires Plack 0.99And Plack 0.99 requires HTTP::Request 6.03And HTTP::Request requires ...
    119. 119. Pinning A PackageSuppose you want to use CatalystAnd Catalyst requires Plack 0.99And Plack 0.99 requires HTTP::Request 6.03And HTTP::Request requires ......requires URI 1.62
    120. 120. Pinning A Packagepinto -v pull Catalyst
    121. 121. Pinning A Package pinto -v pull CatalystPulling Catalyst-Runtime-5.90012.tar.gz
    122. 122. Pinning A Package pinto -v pull CatalystPulling Catalyst-Runtime-5.90012.tar.gzPulling CGI-Simple-1.113.tar.gz
    123. 123. Pinning A Package pinto -v pull CatalystPulling Catalyst-Runtime-5.90012.tar.gzPulling CGI-Simple-1.113.tar.gz...
    124. 124. Pinning A Package pinto -v pull CatalystPulling Catalyst-Runtime-5.90012.tar.gzPulling CGI-Simple-1.113.tar.gz...Pulling Plack-0.9988.tar.gz
    125. 125. Pinning A Package pinto -v pull CatalystPulling Catalyst-Runtime-5.90012.tar.gzPulling CGI-Simple-1.113.tar.gz...Pulling Plack-0.9988.tar.gzPulling Devel-StackTrace-1.27.tar.gz
    126. 126. Pinning A Package pinto -v pull CatalystPulling Catalyst-Runtime-5.90012.tar.gzPulling CGI-Simple-1.113.tar.gz...Pulling Plack-0.9988.tar.gzPulling Devel-StackTrace-1.27.tar.gz...
    127. 127. Pinning A Package pinto -v pull CatalystPulling Catalyst-Runtime-5.90012.tar.gzPulling CGI-Simple-1.113.tar.gz...Pulling Plack-0.9988.tar.gzPulling Devel-StackTrace-1.27.tar.gz...Pulling HTTP-Message-6.03.tar.gz
    128. 128. Pinning A Package pinto -v pull CatalystPulling Catalyst-Runtime-5.90012.tar.gzPulling CGI-Simple-1.113.tar.gz...Pulling Plack-0.9988.tar.gzPulling Devel-StackTrace-1.27.tar.gz...Pulling HTTP-Message-6.03.tar.gzPulling URI-1.62
    129. 129. Pinning A Package pinto -v pull CatalystPulling Catalyst-Runtime-5.90012.tar.gzPulling CGI-Simple-1.113.tar.gz...Pulling Plack-0.9988.tar.gzPulling Devel-StackTrace-1.27.tar.gz...Pulling HTTP-Message-6.03.tar.gzPulling URI-1.62Cannot add GAAS/URI-1.62/URI~1.62 to stack initbecause URI is pinned to GAAS/URI-1.59/URI~1.59
    130. 130. Why Pin?
    131. 131. Why Pin?Prevent otherdevelopers fromupgrading directly
    132. 132. Why Pin?Prevent otherdevelopers fromupgrading directlyPrevent otherdependencies fromupgrading directly
    133. 133. Using Pins And Stacks Together
    134. 134. Experiment With Upgrades
    135. 135. Experiment With UpgradesYou have a “prod” stack with DBIx::Class 1.6
    136. 136. Experiment With UpgradesYou have a “prod” stack with DBIx::Class 1.6Make a copy of the “prod” stack called “test”
    137. 137. Experiment With UpgradesYou have a “prod” stack with DBIx::Class 1.6Make a copy of the “prod” stack called “test”Upgrade to DBIx::Class 1.7 on “test” stack
    138. 138. Experiment With UpgradesYou have a “prod” stack with DBIx::Class 1.6Make a copy of the “prod” stack called “test”Upgrade to DBIx::Class 1.7 on “test” stackBuild & test application using the “test” stack
    139. 139. Experiment With UpgradesYou have a “prod” stack with DBIx::Class 1.6Make a copy of the “prod” stack called “test”Upgrade to DBIx::Class 1.7 on “test” stackBuild & test application using the “test” stackIf the tests fail pin DBIx::Class on the “prod” stack
    140. 140. Making Local Patches
    141. 141. Making Local PatchesYou find a bug in Plack-0.98
    142. 142. Making Local PatchesYou find a bug in Plack-0.98You patch and re-package as Plack-0.98_01.tar.gz
    143. 143. Making Local PatchesYou find a bug in Plack-0.98You patch and re-package as Plack-0.98_01.tar.gzPut Plack-0.98_01.tar.gz in the “prod” stack
    144. 144. Making Local PatchesYou find a bug in Plack-0.98You patch and re-package as Plack-0.98_01.tar.gzPut Plack-0.98_01.tar.gz in the “prod” stackPin Plack on the “prod” stack
    145. 145. Making Local PatchesYou find a bug in Plack-0.98You patch and re-package as Plack-0.98_01.tar.gzPut Plack-0.98_01.tar.gz in the “prod” stackPin Plack on the “prod” stackRemove pin when the author fixes bug
    146. 146. Making Local PatchesYou find a bug in Plack-0.98You patch and re-package as Plack-0.98_01.tar.gzPut Plack-0.98_01.tar.gz in the “prod” stackPin Plack on the “prod” stackRemove pin when the author fixes bugPull Plack-0.99 into the “prod” stack
    147. 147. Pinto In The Real World
    148. 148. Pinto And Legacy Code
    149. 149. Pinto And Legacy CodeDon’t always know what has been installed.So use Dist::Sur veyor to discover dependencies.Stash dependency list in a text file.Then feed dependencies into a Pinto repository.
    150. 150. Pinto And Legacy Code Don’t always know what has been installed. So use Dist::Sur veyor to discover dependencies. Stash dependency list in a text file. Then feed dependencies into a Pinto repository.pinto pull --norecurse < dependencies.txt
    151. 151. Pinto And Legacy Code Don’t always know what has been installed. So use Dist::Sur veyor to discover dependencies. Stash dependency list in a text file. Then feed dependencies into a Pinto repository.pinto pull --norecurse < dependencies.txt do not automatically fetch deps
    152. 152. Pinto And Legacy Code Don’t always know what has been installed. So use Dist::Sur veyor to discover dependencies. Stash dependency list in a text file. Then feed dependencies into a Pinto repository.pinto pull --norecurse < dependencies.txt
    153. 153. Pinto And Dist::Zilla
    154. 154. Pinto And Dist::Zilladzil listdeps | pinto pull
    155. 155. Pinto And Dist::Zilladzil listdeps | pinto pulldzil authordeps | pinto pull
    156. 156. Pinto And The Development Cycle
    157. 157. Pinto And The Development CycleUsually don’t know dependencies ahead of time.
    158. 158. Pinto And The Development CycleUsually don’t know dependencies ahead of time.Might install several modules before choosing.
    159. 159. Pinto And The Development CycleUsually don’t know dependencies ahead of time.Might install several modules before choosing.This process might take several days or weeks.
    160. 160. Pinto And The Development CycleUsually don’t know dependencies ahead of time.Might install several modules before choosing.This process might take several days or weeks.By the time we decide, CPAN might changed.
    161. 161. Pinto And The Development CycleUsually don’t know dependencies ahead of time.Might install several modules before choosing.This process might take several days or weeks.By the time we decide, CPAN might changed.So there’s a hole in the development process.
    162. 162. Pinto And The Development Cyclepinto install -L ~/myperl5 --pull Catalyst
    163. 163. Pinto And The Development Cyclepinto install -L ~/myperl5 --pull Catalyst “install” command
    164. 164. Pinto And The Development Cyclepinto install -L ~/myperl5 --pull Catalyst install into local::lib
    165. 165. Pinto And The Development Cyclepinto install -L ~/myperl5 --pull Catalyst package name
    166. 166. Pinto And The Development Cyclepinto install -L ~/myperl5 --pull Catalyst awesome --pull flag
    167. 167. Pinto And The Development Cyclepinto install -L ~/myperl5 --pull Catalyst
    168. 168. Pinto And The Development Cyclepinto install -L ~/myperl5 --pull Catalyst First, pulls Catalyst and any missing dependencies into the repository.
    169. 169. Pinto And The Development Cyclepinto install -L ~/myperl5 --pull Catalyst First, pulls Catalyst and any missing dependencies into the repository. Dependencies must not violate pin constraints or command fails before installing anything.
    170. 170. Pinto And The Development Cyclepinto install -L ~/myperl5 --pull Catalyst First, pulls Catalyst and any missing dependencies into the repository. Dependencies must not violate pin constraints or command fails before installing anything. Then, installs Catalyst and dependencies (from the repository) into your local::lib directory.
    171. 171. GotchasPinto does not index exactly like PAUSEMay not work for old or oddly packaged codePinto does not enforce permissionsPinto is strict about version numbers
    172. 172. Pinto And Teamwork Repository on shared storage areaEasy to setupPerformance may suck on NFSUsual permission issues
    173. 173. Pinto And Teamwork Repository on a remote host via HTTPpintod on remote hostpinto on local hostCan utilize fast storageCan use HTTP authentication
    174. 174. Running pintod remotehost
    175. 175. Running pintod remotehostpinto --root=/var/ourpan init
    176. 176. Running pintod remotehostpinto --root=/var/ourpan init pintod --root=/var/ourpan
    177. 177. Running pintod remotehostpinto --root=/var/ourpan init pintod --root=/var/ourpan localhost
    178. 178. Running pintod remotehost pinto --root=/var/ourpan init pintod --root=/var/ourpan localhostpinto --root=http://somehost COMMAND
    179. 179. Using pintod For Installation
    180. 180. Using pintod For Installation$ cpancpan[1]> o conf urllist http://remotehost/devcpan[2]> install My::App
    181. 181. Using pintod For Installation$ cpancpan[1]> o conf urllist http://remotehost/devcpan[2]> install My::App append stack name to url
    182. 182. Using pintod For Installation$ cpancpan[1]> o conf urllist http://remotehost/devcpan[2]> install My::Appcpanm --mirror http://remotehost/dev --mirror-only My::App
    183. 183. Using pintod For Installation$ cpancpan[1]> o conf urllist http://remotehost/devcpan[2]> install My::Appcpanm --mirror http://remotehost/dev --mirror-only My::App append stack name to url
    184. 184. Using pintod For Installation$ cpancpan[1]> o conf urllist http://remotehost/devcpan[2]> install My::Appcpanm --mirror http://remotehost/dev --mirror-only My::Apppinto --root=http://remotehost install --stack=dev My::App
    185. 185. Using pintod For Installation$ cpancpan[1]> o conf urllist http://remotehost/devcpan[2]> install My::Appcpanm --mirror http://remotehost/dev --mirror-only My::Apppinto --root=http://remotehost install --stack=dev My::App point to pinto ser ver
    186. 186. Using pintod For Installation$ cpancpan[1]> o conf urllist http://remotehost/devcpan[2]> install My::Appcpanm --mirror http://remotehost/dev --mirror-only My::Apppinto --root=http://remotehost install --stack=dev My::App specify the stack
    187. 187. Using pintod For Installation$ cpancpan[1]> o conf urllist http://remotehost/devcpan[2]> install My::Appcpanm --mirror http://remotehost/dev --mirror-only My::Apppinto --root=http://remotehost install --stack=dev My::App
    188. 188. Pinto Net works
    189. 189. Pinto Net worksCPAN succeeds because it iscentralized
    190. 190. Pinto Net worksCPAN succeeds because it iscentralizedCPAN fails because it iscentralized
    191. 191. Pinto Net worksCPAN succeeds because it iscentralizedCPAN fails because it iscentralizedPinto can be centralized ordistributed
    192. 192. Pinto Net works The CPANTeam Team 1 3 Team 2
    193. 193. Pinto Net works
    194. 194. Pinto Net worksMight not be a good idea
    195. 195. Pinto Net worksMight not be a good ideaNo obvious way to resolvenamespace conflicts
    196. 196. Pinto Net worksMight not be a good ideaNo obvious way to resolvenamespace conflictsWe’ll have to wait and seeif this pans out
    197. 197. Pinto And OS Packaging• UsePinto to build up your application in some directory• Packagethe directory with your favorite OS tools• Add dependencies on non- perl stuff• Deploy as usual
    198. 198. Pinto And Other Tools• Still just a pile of directories and files with an index• AnnoCPAN, MetaCPAN, CPAN::Mini::Webser ver, etc. should still work
    199. 199. Pinto versus Carton Pinto CartonLight weightVCS-FriendlyLocal PatchesStack Support Enterprise Strength
    200. 200. Some Odds & Ends• Dist::Zilla::Plugin::Pinto::Add - release your dist to a Pinto repository with dzil• Dist::Zilla::Chef - use Pinto to manage your project dependencies within the dzil workflow
    201. 201. Pinto Architecture PintoConfiguration Pull Add Copy Merge Logging Repository Database File Store
    202. 202. Extending Pinto• Create an Action subclass and override the “execute” method• YourAction has access to the configuration, logger, and repository objects• Your Action can do whatever it wants• Like extract POD or ack source code in a distribution• But the API is not really stable yet
    203. 203. Future PlansMore VCS-behaviors: revert, diffsReport upstream impacts of upgradesCheck stack for unsatisfiable dependenciesVisualize dependency graphsFaster
    204. 204. Get Yours Todayhttps://metacpan.org/module/Pinto https://github.com/thaljef/Pinto
    205. 205. Thanks For Your Time Jeffrey Thalhammer thaljef@cpan.org

    ×