| 
				
			 | 
			
			
				@@ -147,6 +147,46 @@ install() { 
			 | 
		
	
		
			
			| 
				147
			 | 
			
				147
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				148
			 | 
			
				148
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				149
			 | 
			
				149
			 | 
			
			
				 get_version() { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				150
			 | 
			
			
				+    # 
			 | 
		
	
		
			
			| 
				
			 | 
			
				151
			 | 
			
			
				+    # Build semver version string with build metadata 
			 | 
		
	
		
			
			| 
				
			 | 
			
				152
			 | 
			
			
				+    # 
			 | 
		
	
		
			
			| 
				
			 | 
			
				153
			 | 
			
			
				+    # Build version string from available info using following 
			 | 
		
	
		
			
			| 
				
			 | 
			
				154
			 | 
			
			
				+    # logic: 
			 | 
		
	
		
			
			| 
				
			 | 
			
				155
			 | 
			
			
				+    # 
			 | 
		
	
		
			
			| 
				
			 | 
			
				156
			 | 
			
			
				+    #  1. use VERSION (from config.mk) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				157
			 | 
			
			
				+    #  2. if we are in git, override the version with last tag 
			 | 
		
	
		
			
			| 
				
			 | 
			
				158
			 | 
			
			
				+    #  3. if set, add STAGE (from config.mk) as pre-release ID 
			 | 
		
	
		
			
			| 
				
			 | 
			
				159
			 | 
			
			
				+    #     (afer dash) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				160
			 | 
			
			
				+    #  4. if we are at a later commit than the last tag, add commit 
			 | 
		
	
		
			
			| 
				
			 | 
			
				161
			 | 
			
			
				+    #     sha1 to build metadata (after plus sign) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				162
			 | 
			
			
				+    #  5. if the tree is "dirty", i.e. has uncommited changes, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				163
			 | 
			
			
				+    #     add "dirty" to build metadata 
			 | 
		
	
		
			
			| 
				
			 | 
			
				164
			 | 
			
			
				+    # 
			 | 
		
	
		
			
			| 
				
			 | 
			
				165
			 | 
			
			
				+    # The version is compatible with SemVer 2.0.0. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				166
			 | 
			
			
				+    # 
			 | 
		
	
		
			
			| 
				
			 | 
			
				167
			 | 
			
			
				+    # Examples: 
			 | 
		
	
		
			
			| 
				
			 | 
			
				168
			 | 
			
			
				+    # 
			 | 
		
	
		
			
			| 
				
			 | 
			
				169
			 | 
			
			
				+    #     myprog v1.0.7                         # all clear 
			 | 
		
	
		
			
			| 
				
			 | 
			
				170
			 | 
			
			
				+    #     myprog v1.0.7-alpha                   # STAGE="alpha" 
			 | 
		
	
		
			
			| 
				
			 | 
			
				171
			 | 
			
			
				+    #     myprog v1.0.7-alpha+g1aef811          # ^^ + some commits after 
			 | 
		
	
		
			
			| 
				
			 | 
			
				172
			 | 
			
			
				+    #     myprog v1.0.7-alpha+g1aef811.dirty    # ^^ + tree edited 
			 | 
		
	
		
			
			| 
				
			 | 
			
				173
			 | 
			
			
				+    #     myprog v1.0.7-alpha+dirty             # tag OK but tree edited 
			 | 
		
	
		
			
			| 
				
			 | 
			
				174
			 | 
			
			
				+    #     myprog v1.0.7+dirty                   # ^^ but no stage 
			 | 
		
	
		
			
			| 
				
			 | 
			
				175
			 | 
			
			
				+    # 
			 | 
		
	
		
			
			| 
				
			 | 
			
				176
			 | 
			
			
				+    # Note that versions with "dirty" should be perceived as kind of 
			 | 
		
	
		
			
			| 
				
			 | 
			
				177
			 | 
			
			
				+    # dangerous outside developer's own machine.  Versions with sha1 are 
			 | 
		
	
		
			
			| 
				
			 | 
			
				178
			 | 
			
			
				+    # safer but must not be released. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				179
			 | 
			
			
				+    # 
			 | 
		
	
		
			
			| 
				
			 | 
			
				180
			 | 
			
			
				+    # I have considered decorating the git commit refs to make them 
			 | 
		
	
		
			
			| 
				
			 | 
			
				181
			 | 
			
			
				+    # sort of sortable (e.g. "r1.g1aef811"), but on second thought, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				182
			 | 
			
			
				+    # I don't think it's good idea to give *any* semantics to meta-data 
			 | 
		
	
		
			
			| 
				
			 | 
			
				183
			 | 
			
			
				+    # at all.  First, there is no rule that r1<r2<r3; a commit can be 
			 | 
		
	
		
			
			| 
				
			 | 
			
				184
			 | 
			
			
				+    # removing what other just added and one change can be split to 
			 | 
		
	
		
			
			| 
				
			 | 
			
				185
			 | 
			
			
				+    # multiple commits.  Also, the whole thing breaks anyway once you 
			 | 
		
	
		
			
			| 
				
			 | 
			
				186
			 | 
			
			
				+    # rebase your branch (no, it's not a sin).  The sole purpose of 
			 | 
		
	
		
			
			| 
				
			 | 
			
				187
			 | 
			
			
				+    # meta-data is to *identify* the code, and provide safe path back 
			 | 
		
	
		
			
			| 
				
			 | 
			
				188
			 | 
			
			
				+    # to tree; commit refs are already perfect for that. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				189
			 | 
			
			
				+    # 
			 | 
		
	
		
			
			| 
				150
			 | 
			
				190
			 | 
			
			
				     local version=$VERSION 
			 | 
		
	
		
			
			| 
				151
			 | 
			
				191
			 | 
			
			
				     local stage=$STAGE 
			 | 
		
	
		
			
			| 
				152
			 | 
			
				192
			 | 
			
			
				     if git rev-parse HEAD >&/dev/null; 
			 |