|  | @@ -10,6 +10,7 @@ import (
 | 
	
		
			
			| 10 | 10 |  	"github.com/sirupsen/logrus"
 | 
	
		
			
			| 11 | 11 |  	"golang.org/x/crypto/ssh"
 | 
	
		
			
			| 12 | 12 |  	gogit "gopkg.in/src-d/go-git.v4"
 | 
	
		
			
			|  | 13 | +	"gopkg.in/src-d/go-git.v4/plumbing/transport"
 | 
	
		
			
			| 13 | 14 |  	gitssh "gopkg.in/src-d/go-git.v4/plumbing/transport/ssh"
 | 
	
		
			
			| 14 | 15 |  )
 | 
	
		
			
			| 15 | 16 |  
 | 
	
	
		
			
			|  | @@ -84,7 +85,8 @@ func clone(repo string, clonePath string, auth *gitssh.PublicKeys) (*gogit.Repos
 | 
	
		
			
			| 84 | 85 |  // Returns with the go-git representation of the repository.
 | 
	
		
			
			| 85 | 86 |  // Returns an error if there was an issue opening the repo, getting its work
 | 
	
		
			
			| 86 | 87 |  // tree or pulling from the remote. In the latter case, if the error is "already
 | 
	
		
			
			| 87 |  | -// up to date" or "non-fast-forward update", doesn't return any error.
 | 
	
		
			
			|  | 88 | +// up to date", "non-fast-forward update" or "remote repository is empty",
 | 
	
		
			
			|  | 89 | +// doesn't return any error.
 | 
	
		
			
			| 88 | 90 |  func pull(clonePath string, auth *gitssh.PublicKeys) (*gogit.Repository, error) {
 | 
	
		
			
			| 89 | 91 |  	// Open the repository
 | 
	
		
			
			| 90 | 92 |  	r, err := gogit.PlainOpen(clonePath)
 | 
	
	
		
			
			|  | @@ -116,6 +118,15 @@ func pull(clonePath string, auth *gitssh.PublicKeys) (*gogit.Repository, error)
 | 
	
		
			
			| 116 | 118 |  			return r, nil
 | 
	
		
			
			| 117 | 119 |  		}
 | 
	
		
			
			| 118 | 120 |  
 | 
	
		
			
			|  | 121 | +		if err == transport.ErrEmptyRemoteRepository {
 | 
	
		
			
			|  | 122 | +			logrus.WithFields(logrus.Fields{
 | 
	
		
			
			|  | 123 | +				"clone_path": clonePath,
 | 
	
		
			
			|  | 124 | +				"error":      err,
 | 
	
		
			
			|  | 125 | +			}).Info("Caught specific non-error")
 | 
	
		
			
			|  | 126 | +
 | 
	
		
			
			|  | 127 | +			return r, nil
 | 
	
		
			
			|  | 128 | +		}
 | 
	
		
			
			|  | 129 | +
 | 
	
		
			
			| 119 | 130 |  		// go-git doesn't have an error variable for "non-fast-forward update",
 | 
	
		
			
			| 120 | 131 |  		// so this is the only way to detect it
 | 
	
		
			
			| 121 | 132 |  		if strings.HasPrefix(err.Error(), "non-fast-forward update") {
 | 
	
	
		
			
			|  | @@ -150,7 +161,8 @@ func dirExists(path string) (bool, error) {
 | 
	
		
			
			| 150 | 161 |  // created from the configuration to authenticate on the remote.
 | 
	
		
			
			| 151 | 162 |  // Returns with an error if there was an issue creating the authentication
 | 
	
		
			
			| 152 | 163 |  // structure instance or pushing to the remote. In the latter case, if the error
 | 
	
		
			
			| 153 |  | -// is "already up to date" or "non-fast-forward update", doesn't return any error.
 | 
	
		
			
			|  | 164 | +// is "already up to date", "non-fast-forward update" or "remote repository is
 | 
	
		
			
			|  | 165 | +// empty", doesn't return any error.
 | 
	
		
			
			| 154 | 166 |  func Push(r *gogit.Repository, cfg config.GitSettings) error {
 | 
	
		
			
			| 155 | 167 |  	// Get the authentication structure instance
 | 
	
		
			
			| 156 | 168 |  	auth, err := getAuth(cfg.User, cfg.PrivateKeyPath)
 | 
	
	
		
			
			|  | @@ -181,6 +193,16 @@ func Push(r *gogit.Repository, cfg config.GitSettings) error {
 | 
	
		
			
			| 181 | 193 |  			return nil
 | 
	
		
			
			| 182 | 194 |  		}
 | 
	
		
			
			| 183 | 195 |  
 | 
	
		
			
			|  | 196 | +		if err == transport.ErrEmptyRemoteRepository {
 | 
	
		
			
			|  | 197 | +			logrus.WithFields(logrus.Fields{
 | 
	
		
			
			|  | 198 | +				"repo":       cfg.User + "@" + cfg.URL,
 | 
	
		
			
			|  | 199 | +				"clone_path": cfg.ClonePath,
 | 
	
		
			
			|  | 200 | +				"error":      err,
 | 
	
		
			
			|  | 201 | +			}).Info("Caught specific non-error")
 | 
	
		
			
			|  | 202 | +
 | 
	
		
			
			|  | 203 | +			return nil
 | 
	
		
			
			|  | 204 | +		}
 | 
	
		
			
			|  | 205 | +
 | 
	
		
			
			| 184 | 206 |  		// go-git doesn't have an error variable for "non-fast-forward update", so
 | 
	
		
			
			| 185 | 207 |  		// this is the only way to detect it
 | 
	
		
			
			| 186 | 208 |  		if strings.HasPrefix(err.Error(), "non-fast-forward update") {
 |