Transfers filevault JCR content between the filesystem (unzipped content package) and a server such as AEM (running the package manager HTTP API). Great for development.
Similar to the vlt command line tool from jackrabbit-filevault, but faster, bash-script-only, and with minimal dependencies.
How it works: For a given path inside a jcr_root filevault structure on the filesystem, it creates a package with a single filter for the entire subtree and pushes that to the server (put), fetches it from the server (get), or compares the differences (status and diff). Please note that it will always overwrite the entire file or directory specified. It does not support multiple filter paths or vlt's filter.xml.
Licensed under Apache 2.0.
Table of Contents
Official release versions are tracked here on github.
Homebrew (Mac)
For Homebrew users releases are available via the adobe-marketing-cloud/brews tap: brew tap adobe-marketing-cloud/brews brew install adobe-marketing-cloud/brews/repo
Manual installation
repo is a single bash script depending on basic Unix tools (zip, unzip, curl, rsync, mktemp)?
Download and put it onto your $PATH:
Download the latest release.
Download the latest beta - just the script directly from this github repository.
Supported platforms:
Mac OSX (+ curl, rsync)
Linux (+ curl, rsync)
Windows with Cygwin (+ zip, unzip, curl, rsync packages)
- Installation
- Homebrew (Mac)
- Manual installation
- Integration into IntelliJ
- Integration into Eclipse
- Integration into Visual Studio Code
- common options
- repo checkout (since 1.4)
- repo put
- repo get
- repo status
- repo diff
- repo localdiff
- repo serverdiff
Official release versions are tracked here on github.
Homebrew (Mac)
For Homebrew users releases are available via the adobe-marketing-cloud/brews tap: brew tap adobe-marketing-cloud/brews brew install adobe-marketing-cloud/brews/repo
Manual installation
repo is a single bash script depending on basic Unix tools (zip, unzip, curl, rsync, mktemp)?
Download and put it onto your $PATH:
Download the latest release.
Download the latest beta - just the script directly from this github repository.
Supported platforms:
Mac OSX (+ curl, rsync)
Linux (+ curl, rsync)
Windows with Cygwin (+ zip, unzip, curl, rsync packages)
Integration into IntelliJ
Want to hit a shortcut like ctrl + cmd + P and have your currently open file or selected folder pushed to the server from within IntelliJ? Without having to save or anything else? Just set up these tools below.
Setup external tools under Settings > Tools > External Tools. Add a group "repo" and add commands below, leaving the "Working Directory" empty. Keyboard shortcuts are managed under Settings > Keymap, search for "repo" after you created the external tool entries. Below shortcuts are examples, your mileage may vary.
Mac:
Cygwin is required, and repo must be called explicitly using Cygwin's bash.
Make sure the folder containing repo is in cygwin's $PATH variable. Alternatively, replace -l repo in the parameters below with the full absolute path, for example -l c:\repoinstallfolder\repo.
Setup external tools under Run > Exernal Tools > Exernal Tool Configurations.... Add a Programm which points to the repo shell script for each desired REPO operation. I would recommend disabling Build before launch in the Build tab.
Examples:
Want to hit a shortcut like ctrl + cmd + P and have your currently open file or selected folder pushed to the server from within IntelliJ? Without having to save or anything else? Just set up these tools below.
Setup external tools under Settings > Tools > External Tools. Add a group "repo" and add commands below, leaving the "Working Directory" empty. Keyboard shortcuts are managed under Settings > Keymap, search for "repo" after you created the external tool entries. Below shortcuts are examples, your mileage may vary.
Mac:
- put
- Program: repo (if in $PATH, otherwise use the absolute path to repo here)
- Parameters: put -f $FilePath$
- Keyboard Shortcut: ctrl + cmd + P
- get
- Program: repo
- Parameters: get -f $FilePath$
- Keyboard Shortcut: ctrl + cmd + G (note: already used by default keymap for grepping)
- status
- Program: repo
- Parameters: st $FilePath$
- Keyboard Shortcut: ctrl + cmd + S
- diff
- Program: repo
- Parameters: diff $FilePath$
- Keyboard Shortcut: ctrl + cmd + D
Cygwin is required, and repo must be called explicitly using Cygwin's bash.
Make sure the folder containing repo is in cygwin's $PATH variable. Alternatively, replace -l repo in the parameters below with the full absolute path, for example -l c:\repoinstallfolder\repo.
- put
- Program: <path-to-cygwin>\bin\bash - for example: C:\cygwin64\bin\bash
- Parameters: -l repo put -f $FilePath$
- get
- Program: <path-to-cygwin>\bin\bash
- Parameters: -l repo get -f $FilePath$
- status
- Program: <path-to-cygwin>\bin\bash
- Parameters: -l repo st $FilePath$
- diff
- Program: <path-to-cygwin>\bin\bash
- Parameters: -l repo diff $FilePath$
Setup external tools under Run > Exernal Tools > Exernal Tool Configurations.... Add a Programm which points to the repo shell script for each desired REPO operation. I would recommend disabling Build before launch in the Build tab.
Examples:
- put
- Location: <install-path>/repo
- Working Directory: ${container_loc}
- Arguments: put -f ${selected_resource_name}
- get
- Location: <install-path>/repo
- Working Directory: ${container_loc}
- Arguments: get -f ${selected_resource_name}
Integration into Visual Studio Code
Configure custom tasks under Terminal > Configure Tasks... > Create tasks.json file from template > Others. This will create a tasks.json beneath a .vscode the directory in the current workspace.
Configure custom tasks under Terminal > Configure Tasks... > Create tasks.json file from template > Others. This will create a tasks.json beneath a .vscode the directory in the current workspace.
Below are examples of tasks using repo, assuming repo has been added and available at the terminal path.
Note, variables available are scoped to the currently opened file. See Variables Reference for more info.
// .vscode/tasks.json
{
// examples of using repo to push and pull files and folders from a server running at localhost:4502
// the tasks with folders actions will be perfomed on the folder of the current file open in the editor
// see https://code.visualstudio.com/docs/editor/variables-reference for more details
"version": "2.0.0",
"tasks": [
{
"label": "put file",
"type": "shell",
"command": "repo put -f ${file}",
"problemMatcher": []
},
{
"label": "put folder",
"type": "shell",
"command": "repo put -f ${fileDirname}",
"problemMatcher": []
},
{
"label": "get file",
"type": "shell",
"command": "repo get -f ${file}",
"problemMatcher": []
},
{
"label": "get folder",
"type": "shell",
"command": "repo get -f ${fileDirname}",
"problemMatcher": []
}
]
}
Keyboard shortcuts can be created under Code > Preferences > Keyboard Shortcuts > edit keybindings.json
Keyboard shortcuts can be created under Code > Preferences > Keyboard Shortcuts > edit keybindings.json
Below are examples of keyboard shortcuts to trigger the custom tasks, your mileage may vary.
// keybindings.json
// keyboard shortcuts for repo tasks
[
{
"key": "ctrl+cmd+p",
"command": "workbench.action.tasks.runTask",
"args": "put file"
},
{
"key": "shift+cmd+p",
"command": "workbench.action.tasks.runTask",
"args": "put folder"
},
{
"key": "ctrl+cmd+g",
"command": "commandId",
"when": "editorTextFocus"
},
{
"key": "ctrl+cmd+g",
"command": "workbench.action.tasks.runTask",
"args": "get file"
},
{
"key": "shift+cmd+g",
"command": "workbench.action.tasks.runTask",
"args": "get folder"
}
Usage: repo <command> [opts] [<path>]
FTP-like tool for JCR content, with support for diffing.
Transfers filevault JCR content between the filesystem (unzipped content package)
and a server such as AEM (running the package manager HTTP API).
For a given path inside a jcr_root filevault structure on the filesystem, it
creates a package with a single filter for the entire subtree and pushes that to
the server (put), fetches it from the server (get) or compares the differences
(status and diff). Please note that it will always overwrite the entire file or
directory specified. Does not support multiple filter paths or vlt's filter.xml.
Available commands:
checkout intial checkout of server content on file system
put upload local file system content to server
get download server content to local file system
status (st) list status of modified/added/deleted files
diff show differences, same as 'localdiff'
localdiff show differences done locally compared to server
serverdiff show differences done on the server compared to local
Config files:
.repo
Can be placed in checkout or any parent directory. Allows to configure
server and credentials. Note that command line options take precedence.
server=http://server.com:8080
credentials=user:pwd
.repoignore
Placed in the jcr_root directory, this file can list files to ignore
using glob patterns. Also supported are .vltignore files.
Examples:
Assume a running CQ server on http://localhost:4502
(1) Start from scratch, working on /apps/project available on server
repo checkout /apps/project
(2) Upload changes to server
cd jcr_root/apps/project
vim .content.xml # some modifications
repo put # upload & overwrite entire dir
touch file.jsp # add new file
repo put file.jsp # just push single file
(3) Download changes from server
repo get
(4) Show status and diff
repo st
repo
diff
(5) Use custom server & credentials
repo st -s localhost:8888 -u user:pwd
(6) Avoid interactive confirmation (force)
Be careful, easy to wipe out your repository!
repo put -f
Arguments:
<path> local directory or file to sync; defaults to current dir
Options:
-h --help show this help
-s <server> server, defaults to 'http://localhost:4502'
include context path if needed
Usage: repo checkout [opts] [<jcr-path>]
Initially check out <jcr-path> from the server on the file system.
This will create a jcr_root folder in the current directory and check
out the <jcr-path> in there. If this is called within a jcr_root or
a jcr_root exists within the current directory, it will detect that
and check out the <jcr-path> in there.
Arguments:
Usage: repo put [opts] [<path>]
Upload local file system content to server for the given path.
Options:
-f force, don't ask for confirmation
Usage: repo get [opts] [<path>]
Download server content to local filesystem for the given path.
Options:
-f force, don't ask for confirmation
Usage: repo status [opts] [<path>]
List status of files compared to the server at the given path.
Status legend:
M modified
A added locally / deleted remotely
D removed locally / added remotely
~ fd conflict: local file vs. remote directory
Usage: repo diff [opts] [<path>]
Show differences done locally compared to server at the given path.
Same as 'localdiff', showing +++ if things were added locally.
If you made changes on the server, use 'serverdiff' instead.
repo localdiff
repo localdiff
Usage: repo localdiff [opts] [<path>]
Show differences done locally compared to server at the given path.
Showing +++ if things were added locally (or removed on the server).
If you made changes on the server, use 'serverdiff' instead.
repo serverdiff
repo serverdiff
Usage: repo serverdiff [opts] [<path>]
Show differences done on the server compared to local at the given path.
Showing +++ if things were added on the server (or removed locally).
If you made changes locally, use 'localdiff' instead.
repo: not inside a vault checkout with a jcr_root base directory
ReplyDelete