/github-sync-matlab

Download or update a user-provided list of github repositories

Primary LanguageMATLABMIT LicenseMIT

GitHub repository synchronization for Matlab

If your Matlab project uses other GitHub repositories, then you can use this function to ensure those those dependencies are installed (cloned) and updated.

Installation

Clone this repository to somewhere relevant.

cd('~/Documents/Matlab')
system('git clone https://github.com/drbenvincent/github-sync-matlab.git')

Example use

Make sure the folder is on the matlab path

addpath('~/Documents/Matlab/github-sync-matlab')

Use as follows. Warning this will download or update the repositories to your machine.

dependencies={
    'https://github.com/drbenvincent/mcmc-utils-matlab',
    'https://github.com/altmany/export_fig'};
githubSync(dependencies)

Optional input arguments

Selective updating

Optionally provide a vector (same length as dependencies) indicating which dependencies to exclude from updates. The vector can be logical (true or false) or binary (0 or 1).

githubSync(dependencies, 'exclude', [false true])

Update the updater

Get any updates to this updating code ;) Uses recursive black magic.

githubSync(dependencies, 'selfUpdate', true)

Using this code in a project you deploy to others

If you want to just use this code to keep your repo's up to date for your own work then it's fairly straightforward. However, you may also want to deploy some code, to be used by other people. While this repo will help keep dependencies up to data, there is a bit of a chicken and egg problem. How does an end user first install this code?

If you just include this code (along with the licence please) then that should be fine. But if you wanted it to be in it's own repo then you can include the code below in setup code in your deployed package. It will attempt to update the repo, but it will fail the first time (due to it not being installed) and then clone it. Every subsequent time, it will just update.

startDir = cd;
repoURL = 'https://github.com/drbenvincent/github-sync-matlab';
repoName = 'github-sync-matlab';
try
	% Attempt to pull latest verion
	cd(fullfile(defineInstallPath(),repoName))
	addpath(cd)
	system('git pull');
catch
	% If this fails, we assume repo is not present, therefore clone
	cd(defineInstallPath())
	system( sprintf('git clone %s.git', repoURL) )
end
cd(startDir)