npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@shadowspawn/forest-arborist

v13.0.0

Published

Forest Arborist. A loosely coupled repository manager inspired by Mercurial subrepositories, npm, and Git.

Downloads

172

Readme

Forest Arborist

npm version GitHub build

Overview

Work with a forest of repositories as easily as using a single repo: from fab clone, through fab pull and fab status, to custom commands.

Supports Git and Mercurial repositories. Tested on macOS, Windows, and Linux.

Aims to be lightweight and coexist with other tooling, rather than intrusive and opinionated. Adds a manifest file in the seed repo and a marker file at the root of the forest.

Most commands can be run from anywhere in the forest.

Terminology:

  • forest: a collection of repositories and their working trees
  • root: directory at the root of the forest
  • manifest: lists dependent repositories and forest configuration
  • seed repository: where the manifest is stored

Installation

Requires node and npm.

npm install --global @shadowspawn/forest-arborist
fab help

Forest Management Commands

To add fab to an existing forest you run init from the seed repo where you want the manifest to be stored.

  • fab init --nested from root repo for a nested forest
  • fab init --sibling from seed repo for a sibling forest, with root up one directory

You clone a seed repo to get the forest. This uses the manifest to find the dependent repos and forest layout.

fab clone ssh://user@host:/path

If you have more than one combination of repos you use, such as different platform libraries or production vs development, you can specify a manifest name:

fab init --sibling --manifest mac
fab clone --manifest mac ssh://user@host:/path

To (re)install dependent repos if the manifest has changed, or install dependent repos after cloning just the seed repo:

fab install

Utility Commands

To see a compact status listing for each repo in the forest:

fab status

To pull new changesets:

fab pull

There are two commands which take an explicit additional command to run across the forest. A -- is used to mark the end of the fab options, and is optional if there are no options in the additional command. (free is explained in Dependent Repository Types)

fab for-each git remote -v
fab for-free git branch

There are two commands which run specifically git or hg commands across the forest repositories of matching type:

fab git remote -v
fab hg summary

Working With Branches

You can specify the starting branch when you make the clone:

fab clone --branch develop ssh://user@host:/path

There are commands to make a new branch and to switch to an existing branch:

fab make-branch feature/bells
fab make-branch --publish feature/working-with-others
fab switch trunk

The branch commands operate on the free repositories, and not the pinned or locked repositories. (See Dependent Repository Types.)

Reproducing Forest State

There are three commands for reproducing forest state:

  • snapshot produces a listing of the current forest and changesets
  • restore takes the current forest back to the snapshot state
  • recreate is like clone but takes a snapshot file

Example commands:

fab snapshot --output ~/snapshot1
git pull
fab restore ~/snapshot1
cd ~/sandpit
fab recreate ~/snapshot1 myTempRepo

Dependent Repository Types

Some of the repositories you work with are actively developed along with the seed repo, while some might actively track the release branch of a library, and some should stay fixed at a specific version.

The dependent repos can be configured in three ways:

  • pinned to a specified changeset or tag
  • locked to a specified branch
  • free to follow the seed repo

The various commands operate on an appropriate subset of the repos. For example the switch command only affects the free repositories, the pull command affects free and locked, and the status command runs on all the repos.

Manifest Files (Internals)

The manifest specifies the forest layout and the dependent repository details. The manifest file can be automatically generated by:

  • fab init --nested from root repository for a nested forest
  • fab init --sibling from seed repo for a sibling forest
  • fab init --sibling --manifest name to save a custom manifest

You can manage the manifest contents with the manifest command:

  • fab manifest path show path to manifest
  • fab manifest edit open manifest in editor
  • fab manifest list list dependencies from manifest
  • fab manifest add newRepo add entry to manifest dependencies
  • fab manifest delete staleRepo delete entry from manifest dependencies

The dependencies map is where you might do some hand editing. The map key is the working directory relative to the root of the forest. The properties are:

  • origin: remote repo. Either absolute or relative to the seed origin.
  • repoType: "git" or "hg"
  • pinRevision: if pinned, changeset or tag
  • lockBranch: if locked, branch name

Example:

{"dependencies": {
    "Libs/Locked": {
    "origin": "[email protected]:Person/Locked.git ",
    "repoType": "git",
    "lockBranch": "trunk"
    },
    "Libs/Pinned": {
    "origin": "[email protected]:Person/Pinned.git ",
    "repoType": "git",
    "pinRevision": "ce12a1b401e72f7808ab3da7a696a5ab4cd364fe"
    },
    "RelativeFree": {
    "origin": "../relative-to-seed.git",
    "repoType": "git"
    }
},
"rootDirectory": ".",
"seedPathFromRoot": "."
}

The manifests are stored in the .fab folder of the seed repo. Custom manifests follow the template <custom>_manifest.json.

Command-line Tab Completion

To install command-line tab completion, write the output of fab completion to a suitable location to be executed, whether via your shell startup file or in a location which is read by the system. See fab completion for installation examples. (c.f. npm completion)

Colour Output

Colour output is off by default on Windows and on by default for other platforms. You can explicitly enable or disable colour using FORCE_COLOR, or disable colour using NO_COLOR.

Developing

| Branch | Build Status | | --- | --- | | develop | GitHub build |

Quick start:

git clone --branch develop [email protected]:shadowspawn/forest-arborist.git
cd forest-arborist
npm install
npm link
npm run test