| 
									
										
										
										
											2013-09-29 02:09:03 -04:00
										 |  |  | // Copyright © 2013 Steve Francia <spf@spf13.com>.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Licensed under the Simple Public License, Version 2.0 (the "License");
 | 
					
						
							|  |  |  | // you may not use this file except in compliance with the License.
 | 
					
						
							|  |  |  | // You may obtain a copy of the License at
 | 
					
						
							|  |  |  | // http://opensource.org/licenses/Simple-2.0
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Unless required by applicable law or agreed to in writing, software
 | 
					
						
							|  |  |  | // distributed under the License is distributed on an "AS IS" BASIS,
 | 
					
						
							|  |  |  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					
						
							|  |  |  | // See the License for the specific language governing permissions and
 | 
					
						
							|  |  |  | // limitations under the License.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package commands
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import (
 | 
					
						
							|  |  |  | 	"fmt"
 | 
					
						
							| 
									
										
										
										
											2014-10-19 09:20:57 -05:00
										 |  |  | 	"os"
 | 
					
						
							|  |  |  | 	"path/filepath"
 | 
					
						
							|  |  |  | 	"strings"
 | 
					
						
							|  |  |  | 	"time"
 | 
					
						
							| 
									
										
										
										
											2014-03-31 13:23:34 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 18:12:19 +01:00
										 |  |  | 	"github.com/kardianos/osext"
 | 
					
						
							| 
									
										
										
										
											2013-09-29 02:09:03 -04:00
										 |  |  | 	"github.com/spf13/cobra"
 | 
					
						
							| 
									
										
										
										
											2015-03-18 12:23:13 +01:00
										 |  |  | 	"github.com/spf13/hugo/helpers"
 | 
					
						
							| 
									
										
										
										
											2014-12-09 08:36:07 -07:00
										 |  |  | 	"github.com/spf13/hugo/hugolib"
 | 
					
						
							| 
									
										
										
										
											2014-10-19 09:20:57 -05:00
										 |  |  | )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var timeLayout string // the layout for time.Time
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-29 02:09:03 -04:00
										 |  |  | var version = &cobra.Command{
 | 
					
						
							|  |  |  | 	Use:   "version",
 | 
					
						
							|  |  |  | 	Short: "Print the version number of Hugo",
 | 
					
						
							|  |  |  | 	Long:  `All software has versions. This is Hugo's`,
 | 
					
						
							|  |  |  | 	Run: func(cmd *cobra.Command, args []string) {
 | 
					
						
							| 
									
										
										
										
											2014-12-09 08:36:07 -07:00
										 |  |  | 		if hugolib.BuildDate == "" {
 | 
					
						
							| 
									
										
										
										
											2014-10-19 09:20:57 -05:00
										 |  |  | 			setBuildDate() // set the build date from executable's mdate
 | 
					
						
							|  |  |  | 		} else {
 | 
					
						
							|  |  |  | 			formatBuildDate() // format the compile time
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							| 
									
										
										
										
											2014-12-09 08:36:07 -07:00
										 |  |  | 		if hugolib.CommitHash == "" {
 | 
					
						
							| 
									
										
										
										
											2015-03-18 12:23:13 +01:00
										 |  |  | 			fmt.Printf("Hugo Static Site Generator v%s BuildDate: %s\n", helpers.HugoVersion(), hugolib.BuildDate)
 | 
					
						
							| 
									
										
										
										
											2014-10-19 09:20:57 -05:00
										 |  |  | 		} else {
 | 
					
						
							| 
									
										
										
										
											2015-03-18 12:23:13 +01:00
										 |  |  | 			fmt.Printf("Hugo Static Site Generator v%s-%s BuildDate: %s\n", helpers.HugoVersion(), strings.ToUpper(hugolib.CommitHash), hugolib.BuildDate)
 | 
					
						
							| 
									
										
										
										
											2014-10-19 09:20:57 -05:00
										 |  |  | 		}
 | 
					
						
							| 
									
										
										
										
											2013-09-29 02:09:03 -04:00
										 |  |  | 	},
 | 
					
						
							|  |  |  | }
 | 
					
						
							| 
									
										
										
										
											2014-10-19 09:20:57 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | // setBuildDate checks the ModTime of the Hugo executable and returns it as a
 | 
					
						
							|  |  |  | // formatted string.  This assumes that the executable name is Hugo, if it does
 | 
					
						
							| 
									
										
										
										
											2014-11-04 17:43:14 +01:00
										 |  |  | // not exist, an empty string will be returned.  This is only called if the
 | 
					
						
							| 
									
										
										
										
											2014-12-09 08:36:07 -07:00
										 |  |  | // hugolib.BuildDate wasn't set during compile time.
 | 
					
						
							| 
									
										
										
										
											2014-10-19 09:20:57 -05:00
										 |  |  | //
 | 
					
						
							|  |  |  | // osext is used for cross-platform.
 | 
					
						
							|  |  |  | func setBuildDate() {
 | 
					
						
							|  |  |  | 	fname, _ := osext.Executable()
 | 
					
						
							|  |  |  | 	dir, err := filepath.Abs(filepath.Dir(fname))
 | 
					
						
							|  |  |  | 	if err != nil {
 | 
					
						
							|  |  |  | 		fmt.Println(err)
 | 
					
						
							|  |  |  | 		return
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							| 
									
										
										
										
											2015-01-27 20:09:10 -05:00
										 |  |  | 	fi, err := os.Lstat(filepath.Join(dir, filepath.Base(fname)))
 | 
					
						
							| 
									
										
										
										
											2014-10-19 09:20:57 -05:00
										 |  |  | 	if err != nil {
 | 
					
						
							|  |  |  | 		fmt.Println(err)
 | 
					
						
							|  |  |  | 		return
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 	t := fi.ModTime()
 | 
					
						
							| 
									
										
										
										
											2014-12-09 08:36:07 -07:00
										 |  |  | 	hugolib.BuildDate = t.Format(time.RFC3339)
 | 
					
						
							| 
									
										
										
										
											2014-10-19 09:20:57 -05:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-09 08:36:07 -07:00
										 |  |  | // formatBuildDate formats the hugolib.BuildDate according to the value in
 | 
					
						
							| 
									
										
										
										
											2014-10-19 09:20:57 -05:00
										 |  |  | // .Params.DateFormat, if it's set.
 | 
					
						
							|  |  |  | func formatBuildDate() {
 | 
					
						
							| 
									
										
										
										
											2014-12-09 08:36:07 -07:00
										 |  |  | 	t, _ := time.Parse("2006-01-02T15:04:05-0700", hugolib.BuildDate)
 | 
					
						
							|  |  |  | 	hugolib.BuildDate = t.Format(time.RFC3339)
 | 
					
						
							| 
									
										
										
										
											2014-10-19 09:20:57 -05:00
										 |  |  | }
 |