48 lines
1.9 KiB
Matlab
48 lines
1.9 KiB
Matlab
function [formatted,treeish] = VersionControlIdentifier()
|
|
% This function gives the (git) commit ID of matlab2tikz
|
|
%
|
|
% This assumes the standard directory structure as used by Nico's master branch:
|
|
% SOMEPATH/src/matlab2tikz.m with a .git directory in SOMEPATH.
|
|
%
|
|
% The HEAD of that repository is determined from file system information only
|
|
% by following dynamic references (e.g. ref:refs/heds/master) in branch files
|
|
% until an absolute commit hash (e.g. 1a3c9d1...) is found.
|
|
% NOTE: Packed branch references are NOT supported by this approach
|
|
MAXITER = 10; % stop following dynamic references after a while
|
|
formatted = '';
|
|
REFPREFIX = 'ref:';
|
|
isReference = @(treeish)(any(strfind(treeish, REFPREFIX)));
|
|
treeish = [REFPREFIX 'HEAD'];
|
|
try
|
|
% get the matlab2tikz directory
|
|
privateDir = fileparts(mfilename('fullpath'));
|
|
gitDir = fullfile(privateDir,'..','..','.git');
|
|
|
|
nIter = 1;
|
|
while isReference(treeish)
|
|
refName = treeish(numel(REFPREFIX)+1:end);
|
|
branchFile = fullfile(gitDir, refName);
|
|
|
|
if exist(branchFile, 'file') && nIter < MAXITER
|
|
% The FID is reused in every iteration, so `onCleanup` cannot
|
|
% be used to `fclose(fid)`. But since there is very little that
|
|
% can go wrong in a single `fscanf`, it's probably best to leave
|
|
% this part as it is for the time being.
|
|
fid = fopen(branchFile,'r');
|
|
treeish = fscanf(fid,'%s');
|
|
fclose(fid);
|
|
nIter = nIter + 1;
|
|
else % no branch file or iteration limit reached
|
|
treeish = '';
|
|
return;
|
|
end
|
|
end
|
|
catch %#ok
|
|
treeish = '';
|
|
end
|
|
if ~isempty(treeish)
|
|
formatted = [' Commit & ' treeish ' \\\\ \n'];
|
|
end
|
|
%TODO: do the formatting somewhere else!
|
|
end
|