diff --git a/AD9361_Filter_Wizard.m b/AD9361_Filter_Wizard.m index 998a648..184db44 100644 --- a/AD9361_Filter_Wizard.m +++ b/AD9361_Filter_Wizard.m @@ -1,3 +1,6 @@ +% AD9361 Filter Wizard +% version: 16.1.0 +% % Name-Value Pair Arguments % % Specify optional comma-separated pairs of Name,Value arguments. Name is @@ -183,7 +186,8 @@ function AD9361_Filter_Wizard_OpeningFcn(hObject, eventdata, handles, varargin) handles.Original_Size = get(handles.AD9361_Filter_app, 'Position'); % set the window name -set(handles.AD9361_Filter_app, 'Name', 'AD9361 Filter Wizard'); +window_name = sprintf('AD9361 Filter Wizard %s', get_version); +set(handles.AD9361_Filter_app, 'Name', window_name); guidata(hObject, handles); diff --git a/get_version.m b/get_version.m new file mode 100644 index 0000000..a134ed9 --- /dev/null +++ b/get_version.m @@ -0,0 +1,167 @@ +function version = get_version() +version = ''; + +% extract version info from main application header +fid = fopen('AD9361_Filter_Wizard.m'); +line = fgets(fid); +while strcmp(version, '') && ischar(line) + version_regex = '%\s*version: (\S+)'; + [tokens, match] = regexpi(line, version_regex, 'tokens', 'match'); + if ~isempty(match) + version = tokens{1}{1}; + break; + end + line = fgets(fid); +end + +if strcmp(version, '') + error('Missing application version in main file!'); +end + +% add git hash info if inside a git repo +git = getGitInfo(); +if ~isempty(git) && isfield(git, 'hash') + version = strcat(version, '-g', git.hash(1:7)); +end + + +function gitInfo = getGitInfo() +% Get information about the Git repository in the current directory, including: +% - branch name of the current Git Repo +% -Git SHA1 HASH of the most recent commit +% -url of corresponding remote repository, if one exists +% +% The function first checks to see if a .git/ directory is present. If so it +% reads the .git/HEAD file to identify the branch name and then it looks up +% the corresponding commit. +% +% It then reads the .git/config file to find out the url of the +% corresponding remote repository. This is all stored in a gitInfo struct. +% +% Note this uses only file information, it makes no external program +% calls at all. +% +% This function must be in the base directory of the git repository +% +% Released under a BSD open source license. Based on a concept by Marc +% Gershow. +% +% Andrew Leifer +% Harvard University +% Program in Biophysics, Center for Brain Science, +% and Department of Physics +% leifer@fas.harvard.edu +% http://www.andrewleifer.com +% 12 September 2011 + +% Copyright 2011 Andrew Leifer. All rights reserved. +% +% Redistribution and use in source and binary forms, with or without modification, are +% permitted provided that the following conditions are met: +% +% 1. Redistributions of source code must retain the above copyright notice, this list of +% conditions and the following disclaimer. +% +% 2. Redistributions in binary form must reproduce the above copyright notice, this list +% of conditions and the following disclaimer in the documentation and/or other materials +% provided with the distribution. +% +% THIS SOFTWARE IS PROVIDED BY ''AS IS'' AND ANY EXPRESS OR IMPLIED +% WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +% FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OR +% CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +% SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +% ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +% NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +% ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +% +% The views and conclusions contained in the software and documentation are those of the +% authors and should not be interpreted as representing official policies, either expressed +% or implied, of . + + gitInfo=[]; +if ~exist('.git','file') || ~exist('.git/HEAD','file') + %Git is not present + return +end + +% Read in the HEAD information, this will tell us the location of the file +% containing the SHA1 +text=fileread('.git/HEAD'); +parsed=textscan(text,'%s'); + +if ~strcmp(parsed{1}{1},'ref:') || ~length(parsed{1})>1 + %the HEAD is not in the expected format. + %give up + return +end + +path=parsed{1}{2}; +[pathstr, name, ext]=fileparts(path); +branchName=name; + +%save branchname +gitInfo.branch=branchName; + +%Read in SHA1 +SHA1text=fileread(fullfile(['.git/' pathstr],[name ext])); +SHA1=textscan(SHA1text,'%s'); +gitInfo.hash=SHA1{1}{1}; + +%Read in config file +config=fileread('.git/config'); +%Find everything space delimited +temp=textscan(config,'%s','delimiter','\n'); +lines=temp{1}; + +remote=''; +%Lets find the name of the remote corresponding to our branchName +for k=1:length(lines) + + %Are we at the section describing our branch? + if strcmp(lines{k},['[branch "' branchName '"]']) + m=k+1; + %While we haven't run out of lines + %And while we haven't run into another section (which starts with + % an open bracket) + while (m<=length(lines) && ~strcmp(lines{m}(1),'[') ) + temp=textscan(lines{m},'%s'); + if length(temp{1})>=3 + if strcmp(temp{1}{1},'remote') && strcmp(temp{1}{2},'=') + %This is the line that tells us the name of the remote + remote=temp{1}{3}; + end + end + + m=m+1; + end + end +end +gitInfo.remote=remote; + +url=''; +%Find the remote's url +for k=1:length(lines) + + %Are we at the section describing our branch? + if strcmp(lines{k},['[remote "' remote '"]']) + m=k+1; + %While we haven't run out of lines + %And while we haven't run into another section (which starts with + % an open bracket) + while (m<=length(lines) && ~strcmp(lines{m}(1),'[') ) + temp=textscan(lines{m},'%s'); + if length(temp{1})>=3 + if strcmp(temp{1}{1},'url') && strcmp(temp{1}{2},'=') + %This is the line that tells us the name of the remote + url=temp{1}{3}; + end + end + + m=m+1; + end + end +end + +gitInfo.url=url;