Pinto:...ckStart(3pm)

✨ NAME ✨

Pinto::Manual::QuickStart β€” bestie, it's literally a condensed summary of Pinto πŸ’–

This is the Pinto:...ckStart(3pm) page from the User Contributed Perl Documentation, and it's your lil cheat sheet, your sparknotes, your group-chat recap of everything Pinto can do. No cap.


🌸 VERSION 🌸

version 0.14 β€” yeah she's got a version number and she's proud of it πŸ’…


πŸŽ€ INSTALLING PINTO πŸŽ€

okay so first things first, you gotta get Pinto on your machine. Copy-paste era:

curl -L http://getpinto.stratopan.com | bash
source ~/opt/local/pinto/etc/bashrc

that second line? that's the source of the bashrc so your shell knows what's up. don't skip her 🫢


πŸ’– CREATING A REPOSITORY πŸ’–

time to make a repo, the moment we've all been waiting for ✨

# A new repository with default stack named "master"
pinto -r /repo/dir init
pinto init /repo/dir

# A new repository with default stack named "dev"
pinto -r /repo/dir init --stack dev

not me giving you two ways to say the same thing β€” -r /repo/dir or just plopping the path right after init. both iconic, both valid 🌈

and yes, you can name your default stack whatever. the default default is master, but dev is right there if you're feeling spicy πŸ”₯


πŸ¦‹ BROWSING A REPOSITORY πŸ¦‹

vibe check: what's actually in here?

# See all packages in the default stack
pinto -r /repo/dir list

# See all packages in the default stack matching m/Foo::Bar/i
pinto -r /repo/dir list -P Foo::Bar

# See all packages in the default stack by author "JOE"
pinto -r /repo/dir list -A JOE

# See all packages in the "dev" stack
pinto -r /repo/dir list --stack dev
pinto -r /repo/dir list dev

so -P filters by a pattern, and it's a case-insensitive regex match, m/Foo::Bar/i, periodt. -A filters by author, shoutout JOE. and to peek a specific stack you can do --stack dev or just toss dev on the end like it's nothing πŸ’…


πŸ‘‘ PULLING UPSTREAM DISTRIBUTIONS πŸ‘‘

pulling = grabbing stuff from upstream and bringing it home 🫢

# Pull any version of Foo::Bar
pinto -r /repo/dir pull Foo::Bar

# Pull version 2.4 or newer of Foo::Bar
pinto -r /repo/dir pull Foo~2.4

# Pull exactly version 2.4 of Foo::Bar
pinto -r /repo/dir pull Foo==2.4

# Pull a specific distribution
pinto -r /repo/dir pull AUTHOR/Foo-Bar-1.9.tar.gz

# Pull and pin at the same time
pinto -r /repo/dir pull --pin Foo::Bar~2.4

# Pull many packages or distributions
pinto -r /repo/dir pull Foo::Bar Baz::Qux ...
pinto -r /repo/dir pull < LIST_OF_PACKAGES

# Pull everything for a Dist::Zilla project
dzil listdeps | pinto -r /repo/dir pull

# Pull onto the "dev" stack
pinto -r /repo/dir pull --stack dev Foo::Bar

okay the tilde and the double-equals are the whole thing, listen:

  • Foo~2.4 = version 2.4 or newer, she's flexible, she's chill 😌
  • Foo==2.4 = exactly 2.4, no negotiations, no substitutions, periodt πŸ’…

and you can pull a whole distribution by naming it like AUTHOR/Foo-Bar-1.9.tar.gz, or pull a whole lil lineup at once, or pipe a list in with < LIST_OF_PACKAGES, or pipe dzil listdeps straight through for your Dist::Zilla project. obsessed with the flexibility fr fr ✨

--pin does the pulling and the pinning at the same time because why do two trips 🌸 and --stack dev sends it to a different stack, main character energy.


🌈 ADDING LOCAL DISTRIBUTIONS 🌈

when the dist lives on your machine, not upstream πŸŽ€

# Add a local dist to the default stack
pinto -r /repo/dir add My-Dist-1.0.tar.gz

# Assign to a different author
pinto -r /repo/dir add --author SHAKESPEARE My-Dist-1.0.tar.gz

# Add and pin at the same time
pinto -r /repo/dir add --pin My-Dist-1.0.tar.gz

# Add to the "dev" stack
pinto -r /repo/dir add --stack dev My-Dist-1.0.tar.gz

--author SHAKESPEARE to assign it to somebody else (yes, that Shakespeare, be whoever you wanna be πŸ’œ), --pin to add and pin in one go, --stack dev to yeet it into the dev stack instead.


πŸ“ INSTALLING THINGS πŸ“

the payoff, the moment, the slay πŸ’…

# Install from the default stack using cpanm
cpanm --mirror file:///repo/dir --mirror-only Foo::Bar

# Install from the "dev" stack using cpanm
cpanm --mirror file:///repo/dir/stacks/dev --mirror-only Foo::Bar

# Install from the default stack using pinto
pinto -r /repo/dir install Foo::Bar

# Install from the "dev" stack using pinto
pinto -r /repo/dir --stack dev install Foo::Bar

# Install and populate the repository with missing prereqs
pinto -r /repo/dir install --do-pull Foo::Bar

notice how cpanm points at file:///repo/dir with --mirror and --mirror-only β€” that's the repo as a local mirror, no cap. want the dev stack instead? the path literally becomes file:///repo/dir/stacks/dev πŸ¦‹

and --do-pull = install and go populate the repository with any missing prereqs while you're at it. multitasking queen πŸ‘‘

also peep the flag placement on that pinto one: --stack dev goes before install. she's particular, respect her πŸ™ˆ


πŸ’œ MANAGING STACKS πŸ’œ

stacks are your whole personality here, so let's manage them πŸ’–

# Create an empty stack named "qa"
pinto -r /repo/dir new qa

# Create a stack by copying "dev" to "qa"
pinto -r /repo/dir copy dev qa

# Delete the dev stack
pinto -r /repo/dir kill dev

# Rename the "dev" stack to "prod"
pinto -r /repo/dir rename dev prod

# Mark the "qa" stack as the default
pinto -r /repo/dir default qa

# Show config properties of the default stack
pinto -r /repo/dir props

# Set config properties of the default stack
pinto -r /repo/dir props --property NAME=VALUE

# Show all the existing stacks
pinto -r /repo/dir stacks

new makes an empty one, copy clones one into another, kill deletes (rip dev 😭), rename renames, default crowns a new default. props shows config properties of the default stack, and props --property NAME=VALUE sets them. stacks lists every stack you've got. so much lore πŸŽ€


🧚 USING PINS 🧚

pins hold a package at a version so it doesn't wander off 🫢

# Pin a package on the default stack
pinto -r /repo/dir pin Foo::Bar

# Pin a package on the "dev" stack
pinto -r /repo/dir pin --stack dev Foo::Bar

# Pin a distribution
pinto -r /repo/dir pin AUTHOR/Foo-Bar-1.0.tar.gz

# Unpin a package from the default stack
pinto -r /repo/dir unpin Fo::Bar

# Unpin a package from the "dev" stack
pinto -r /repo/dir unpin --stack dev Foo::Bar

# Unpin a distribution
pinto -r /repo/dir unpin AUTHOR/Foo-Bar-1.0.tar.gz

you can pin a package or a distribution, and --stack picks which stack gets the treatment. unpin undoes it. (and yeah, that first unpin example really does say Fo::Bar β€” one o, we love a typo moment, don't @ me πŸ™ˆ copy it exactly as she is, bestie.)


πŸ’€ VERSION CONTROL πŸ’€

your repo's whole memory, the receipts, the lore πŸ’…

# View commit messages for the default stack
pinto -r /repo/dir log

# View commit messages for the "dev" stack
pinto -r /repo/dir log dev

# Compare the heads of the default and "qa" stacks
pinto -r /repo/dir diff qa

# Compare the heads of the "dev" and "qa" stacks
pinto -r /repo/dir diff dev qa

# Merge "dev" stack into the "qa" stack (fast-forward only)
pinto -r /repo/dir merge dev qa

log = read the commit messages. diff = compare the heads of two stacks. merge = merge one stack into another β€” and heads up, it's fast-forward only. no fancy merge commits here, she's strict and she's not sorry ⭐


😭 MISCELLANY 😭

the little extras, the side quests, the health check ✨

# Report missing distribution archives
pinto -r /repo/dir verify

# Report repo statistics
pinto -r /repo/dir stats

# Remove orphan files and tune the database
pinto -r /repo/dir clean

# Report top-level distributions of the default stack
pinto -r /repo/dir roots

verify tells you about missing distribution archives, stats gives you repo statistics, clean removes orphan files and tunes the database (self-care fr), and roots reports the top-level distributions of the default stack 🌸


πŸ”₯ GETTING MORE HELP πŸ”₯

lost? same. but it's fine, she has layers 🫢

# Show a list of pinto commands
pinto commands

# Show a brief summary of a COMMAND
pinto help COMMAND

# Show the manual for a COMMAND
pinto manual COMMAND

pinto commands = the full lineup. pinto help COMMAND = the quick lil summary. pinto manual COMMAND = the whole entire manual, the director's cut 🎬


🌟 SEE ALSO 🌟

go deeper, bestie, there's a whole cinematic universe:

  • Pinto::Manual::Tutorial
  • Pinto::Manual::Installing
  • Pinto (the library)
  • pinto (the command)

iykyk πŸ’–


πŸ’… AUTHOR πŸ’…

Jeffrey Ryan Thalhammer <jeff@stratopan.com>

the icon, the legend, the one who built the thing πŸ‘‘


This software is copyright (c) 2015 by Jeffrey Ryan Thalhammer.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

so yeah β€” free software, same terms as Perl 5 itself. share her, remix her, she's for the people 🫢


and that's the whole page, bestie ✨ perl v5.40.1 on the side, dated 2025-04-21, from Pinto:...ckStart(3pm) in the User Contributed Perl Documentation. go build something iconic with it πŸ’…πŸŒˆπŸŽ€

πŸ“¦ where this page comes from