Changeset 8 in code


Ignore:
Timestamp:
Dec 5, 2014, 7:03:33 PM (11 years ago)
Author:
zaitsev.serge
Message:

simplified build process, added pre and post build hooks

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/zs.go

    r7 r8  
    3838                "file":   path,
    3939                "url":    url,
    40                 "outdir": PUBDIR,
    4140                "output": filepath.Join(PUBDIR, url),
    4241                "layout": "index.html",
     
    9089
    9190func env(vars map[string]string) []string {
    92         env := []string{"ZS=" + os.Args[0]}
     91        env := []string{"ZS=" + os.Args[0], "ZS_OUTDIR=" + PUBDIR}
    9392        env = append(env, os.Environ()...)
    94         for k, v := range vars {
    95                 env = append(env, "ZS_"+strings.ToUpper(k)+"="+v)
     93        if vars != nil {
     94                for k, v := range vars {
     95                        env = append(env, "ZS_"+strings.ToUpper(k)+"="+v)
     96                }
    9697        }
    9798        return env
     
    160161}
    161162
    162 func copyFile(path string) error {
    163         if in, err := os.Open(path); err != nil {
    164                 return err
    165         } else {
     163func copyFile(path string) (err error) {
     164        var in, out *os.File
     165        if in, err = os.Open(path); err == nil {
    166166                defer in.Close()
    167                 if stat, err := in.Stat(); err != nil {
    168                         return err
    169                 } else {
    170                         // Directory?
    171                         if stat.Mode().IsDir() {
    172                                 os.Mkdir(filepath.Join(PUBDIR, path), 0755)
    173                                 return nil
    174                         }
    175                         if !stat.Mode().IsRegular() {
    176                                 return nil
    177                         }
    178                 }
    179                 if out, err := os.Create(filepath.Join(PUBDIR, path)); err != nil {
    180                         return err
    181                 } else {
     167                if out, err = os.Create(filepath.Join(PUBDIR, path)); err == nil {
    182168                        defer out.Close()
    183169                        _, err = io.Copy(out, in)
    184                         return err
    185                 }
    186         }
     170                }
     171        }
     172        return err
    187173}
    188174
    189175func buildAll(once bool) {
    190176        lastModified := time.Unix(0, 0)
     177        modified := false
    191178        for {
    192179                os.Mkdir(PUBDIR, 0755)
     
    197184                        }
    198185
    199                         if info.ModTime().After(lastModified) {
     186                        if info.IsDir() {
     187                                os.Mkdir(filepath.Join(PUBDIR, path), 0755)
     188                                return nil
     189                        } else if info.ModTime().After(lastModified) {
     190                                if !modified {
     191                                        // About to be modified, so run pre-build hook
     192                                        run(filepath.Join(ZSDIR, "pre"), []string{}, nil, nil)
     193                                        modified = true
     194                                }
    200195                                ext := filepath.Ext(path)
    201196                                if ext == ".md" || ext == "mkd" {
     
    211206                if err != nil {
    212207                        log.Println("ERROR:", err)
     208                }
     209                if modified {
     210                        // Something was modified, so post-build hook
     211                        run(filepath.Join(ZSDIR, "post"), []string{}, nil, nil)
     212                        modified = false
    213213                }
    214214                lastModified = time.Now()
Note: See TracChangeset for help on using the changeset viewer.