---
name: Worktree Status
slug: worktree-status
category: DevOps
description: Lists Liferay worktrees with their assigned ports, running status, offset, and database. Use for status checks on a single worktree or to see all worktrees at a glance.
github: "https://github.com/liferay/liferay-portal/tree/master/.claude/skills/worktree-status"
language: Java
stars: 2260
forks: 3789
install: "git clone https://github.com/liferay/liferay-portal"
added: 2026-07-20T06:48:19.790Z
last_synced: 2026-07-29T06:36:54.635Z
canonical_url: "https://dirskills.com/skills/worktree-status"
---

# Worktree Status

Lists Liferay worktrees with their assigned ports, running status, offset, and database. Use for status checks on a single worktree or to see all worktrees at a glance.

**Install:** `git clone https://github.com/liferay/liferay-portal`

## README

# Worktree Status

Inspect Liferay worktrees and the ports and databases they are configured to use. The skill never mutates state.

## Determine Action

Parse `${ARGUMENTS}` and conversation context:

- **"list"** or user asks which worktrees exist or what is running → List All
- **"status"** or user asks what ports a single worktree uses → Status Check
- **No argument** → default to List All

## Port Defaults

Offset 0 is reserved for the main worktree. All ports shift by the same offset N: `port = default + N`.

| Service | Default | Config Location |
| --- | --- | --- |
| Arquillian | 32763 | `<bundles>/osgi/configs/...ArquillianConnector.config` |
| DataGuard | 42763 | `<bundles>/osgi/configs/...DataGuardConnector.config` |
| Elasticsearch Sidecar HTTP | 9201 | `<bundles>/osgi/configs/...ElasticsearchConfiguration.config` |
| Elasticsearch Transport | 9301 | `<bundles>/osgi/configs/...ElasticsearchConfiguration.config` |
| Glowroot | 4000 | `<bundles>/glowroot/admin.json` |
| HTTPS Redirect | 8443 | `<tomcat>/conf/server.xml` |
| JPDA Debug | 8000 | `<tomcat>/bin/setenv.sh` |
| OSGi Console | 11311 | `<tomcat>/webapps/ROOT/WEB-INF/classes/portal-developer.properties` |
| Tomcat AJP | 8009 | `<tomcat>/conf/server.xml` |
| Tomcat HTTP | 8080 | `<tomcat>/conf/server.xml` |
| Tomcat Shutdown | 8005 | `<tomcat>/conf/server.xml` |

## Database Naming

The database name is derived from the worktree directory name, not the offset:

```
liferay-portal-LPD-12345  →  lportal_lpd_12345
liferay-portal-hotfix     →  lportal_hotfix
liferay-portal            →  lportal (main)
```

Apply this rule: strip the `liferay-portal-` prefix, lowercase, replace nonalphanumeric runs with `_`, collapse consecutive `_`, truncate to 56 characters, then prepend `lportal_`.

## List All

Show a summary table of every Git worktree with its HTTP port, running status, offset, and database.

1. Run `git worktree list --porcelain` to enumerate all worktrees.

1. For each worktree, resolve `<bundles>` by reading `app.server.parent.dir` from `app.server.${USER}.properties` in the worktree root (falling back to `app.server.properties`). Substitute `${project.dir}` with the worktree path.

1. Read `<bundles>/.worktree-port-offset` to obtain the offset, then derive the HTTP port and database name.

1. Detect the running status by matching `-Dcatalina.base` against each worktree's `<tomcat>` directory. Use process matching, not port scanning — port scanning cannot distinguish which Tomcat owns which port.

	```bash
	ps -eo args | grep --only-matching "\-Dcatalina\.base=[^ ]*" | sed "s/-Dcatalina.base=//"
	```

Render the output like this:

```
Worktree                                 Port     Status     Offset    Database
liferay-portal                           -        NO TOMCAT  (none)    -
liferay-portal-LPD-00000                 8081     RUNNING    1         lportal_lpd_00000
liferay-portal-LPD-12345                 8082     STOPPED    2         lportal_lpd_12345
```

## Status Check

Read `<bundles>/.worktree-port-offset` for the current worktree and print the full port table plus the derived database name. Make no modifications.
