anchor.diff:      |> function
           | 0 -> ()
           | n -> failwithf "%s %s failed with code %i" program cmd n
  +
  +let git cmd =
  +    Printf.kprintf (Git.CommandHelper.directRunGitCommandAndFail ".") cmd
   
   let MakeTargets (args: Args) =
   
  
positive.code:             }
  
      Target "WS-Checkout" <| fun () ->
          match args.PushByMergingOnto with
          | None -> ()
          | Some branch ->
              try Git.Branches.checkoutBranch "." branch
              with _ -> Git.Branches.checkoutNewBranch "." args.BaseBranch branch
              Git.Merge.merge "." "" args.BaseBranch
  
      Target "WS-Commit" <| fun () ->
          let changes =
              Git.FileStatus.getChangedFilesInWorkingCopy "." "HEAD"
              |> Seq.map snd
              |> Set
          let allowedChanges = Set ["paket.lock"]
          let badChanges = changes - allowedChanges
          if args.PushOnlyAllowedChanges && not (Set.isEmpty badChanges) then
              let msg =
                  "[GIT] Not committing because these files have changed:\n    * "
                  + String.concat "\n    * " badChanges
              raise (BuildException(msg, []))
          else
              let tag = "v" + args.Version.AsString
              if Set.isEmpty changes then
                  trace "[GIT] OK -- no changes"
              else
                  match args.PushByMergingOnto with
                  | None ->
                      tracefn "[GIT] OK -- committing %s" (String.concat ", " changes)
                      Git.Staging.StageAll "."
                      Git.Commit.Commit "." ("[CI] " + tag)
                  | Some branch ->
                      tracefn "[GIT] OK -- merging onto %s: %s" branch (String.concat ", " changes)
                      Git.Staging.StageAll "."
                      Git.Commit.Commit "." ("[CI] " + tag)
                  Git.Branches.pushBranch "." args.PushRemote (Git.Information.getBranchName ".")
                      
              Git.CommandHelper.directRunGitCommand "." ("tag " + tag) |> ignore
              Git.Branches.pushTag "." args.PushRemote tag
  
      Target "WS-Publish" <| fun () ->
          match environVarOrNone "NugetPublishUrl", environVarOrNone "NugetApiKey" with
  
negative.code:         Attributes : seq<Attribute>
          StrongName : bool
          BaseBranch : string
          WorkBranch : option<string>
          MergeMaster : bool
          PushRemote : string
      }
  
  