summaryrefslogtreecommitdiff
path: root/spec/support/generate-seed-repo-rb
blob: 876b3b8242dff380c6866316752282a0b390dc2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#!/usr/bin/env ruby
#
# # generate-seed-repo-rb
#
# This script generates the seed_repo.rb file used by lib/gitlab/git
# tests. The seed_repo.rb file needs to be updated anytime there is a
# Git push to https://gitlab.com/gitlab-org/gitlab-git-test.
#
# Usage:
#
#   ./spec/support/generate-seed-repo-rb > spec/support/seed_repo.rb
#
#

require 'erb'
require 'tempfile'

SOURCE = File.expand_path('../gitlab-git-test.git', __FILE__).freeze
SCRIPT_NAME = 'generate-seed-repo-rb'.freeze
REPO_NAME = 'gitlab-git-test.git'.freeze

def main
  Dir.mktmpdir do |dir|
    unless system(*%W[git clone --bare #{SOURCE} #{REPO_NAME}], chdir: dir)
      abort "git clone failed"
    end

    repo = File.join(dir, REPO_NAME)
    erb = ERB.new(DATA.read)
    erb.run(binding)
  end
end

def capture!(cmd, dir)
  output = IO.popen(cmd, 'r', chdir: dir) { |io| io.read }
  raise "command failed with #{$?}: #{cmd.join(' ')}" unless $?.success?

  output.chomp
end

main

__END__
# This file is generated by <%= SCRIPT_NAME %>. Do not edit this file manually.
#
# Seed repo:
<%= capture!(%w{git log --format=#\ %H\ %s}, repo) %>

module SeedRepo
  module BigCommit
    ID               = "913c66a37b4a45b9769037c55c2d238bd0942d2e".freeze
    PARENT_ID        = "cfe32cf61b73a0d5e9f13e774abde7ff789b1660".freeze
    MESSAGE          = "Files, encoding and much more".freeze
    AUTHOR_FULL_NAME = "Dmitriy Zaporozhets".freeze
    FILES_COUNT      = 2
  end

  module Commit
    ID               = "570e7b2abdd848b95f2f578043fc23bd6f6fd24d".freeze
    PARENT_ID        = "6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9".freeze
    MESSAGE          = "Change some files\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n".freeze
    AUTHOR_FULL_NAME = "Dmitriy Zaporozhets".freeze
    FILES            = ["files/ruby/popen.rb", "files/ruby/regex.rb"].freeze
    FILES_COUNT      = 2
    C_FILE_PATH      = "files/ruby".freeze
    C_FILES          = ["popen.rb", "regex.rb", "version_info.rb"].freeze
    BLOB_FILE        = %{%h3= @key.title\n%hr\n%pre= @key.key\n.actions\n  = link_to 'Remove', @key, :confirm => 'Are you sure?', :method => :delete, :class => \"btn danger delete-key\"\n\n\n}.freeze
    BLOB_FILE_PATH   = "app/views/keys/show.html.haml".freeze
  end

  module EmptyCommit
    ID               = "b0e52af38d7ea43cf41d8a6f2471351ac036d6c9".freeze
    PARENT_ID        = "40f4a7a617393735a95a0bb67b08385bc1e7c66d".freeze
    MESSAGE          = "Empty commit".freeze
    AUTHOR_FULL_NAME = "Rémy Coutable".freeze
    FILES            = [].freeze
    FILES_COUNT      = FILES.count
  end

  module EncodingCommit
    ID               = "40f4a7a617393735a95a0bb67b08385bc1e7c66d".freeze
    PARENT_ID        = "66028349a123e695b589e09a36634d976edcc5e8".freeze
    MESSAGE          = "Add ISO-8859-encoded file".freeze
    AUTHOR_FULL_NAME = "Stan Hu".freeze
    FILES            = ["encoding/iso8859.txt"].freeze
    FILES_COUNT      = FILES.count
  end

  module FirstCommit
    ID               = "1a0b36b3cdad1d2ee32457c102a8c0b7056fa863".freeze
    PARENT_ID        = nil
    MESSAGE          = "Initial commit".freeze
    AUTHOR_FULL_NAME = "Dmitriy Zaporozhets".freeze
    FILES            = ["LICENSE", ".gitignore", "README.md"].freeze
    FILES_COUNT      = 3
  end

  module LastCommit
    ID               = <%= capture!(%w[git show -s --format=%H HEAD], repo).inspect %>.freeze
    PARENT_ID        = <%= capture!(%w[git show -s --format=%P HEAD], repo).split.last.inspect %>.freeze
    MESSAGE          = <%= capture!(%w[git show -s --format=%s HEAD], repo).inspect %>.freeze
    AUTHOR_FULL_NAME = <%= capture!(%w[git show -s --format=%an HEAD], repo).inspect %>.freeze
    FILES            = <%=
      parents = capture!(%w[git show -s --format=%P HEAD], repo).split
      merge_base = parents.size > 1 ? capture!(%w[git merge-base] + parents, repo) : parents.first
      capture!( %W[git diff --name-only #{merge_base}..HEAD --], repo).split("\n").inspect
    %>.freeze
    FILES_COUNT      = FILES.count
  end

  module Repo
    HEAD = "master".freeze
    BRANCHES = %w[
<%=   capture!(%W[git for-each-ref --format=#{'  ' * 3}%(refname:strip=2) refs/heads/], repo) %>
    ].freeze
    TAGS = %w[
<%=   capture!(%W[git for-each-ref --format=#{'  ' * 3}%(refname:strip=2) refs/tags/], repo) %>
    ].freeze
  end

  module RubyBlob
    ID = "7e3e39ebb9b2bf433b4ad17313770fbe4051649c".freeze
    NAME = "popen.rb".freeze
    CONTENT = <<-eos.freeze
require 'fileutils'
require 'open3'

module Popen
  extend self

  def popen(cmd, path=nil)
    unless cmd.is_a?(Array)
      raise RuntimeError, "System commands must be given as an array of strings"
    end

    path ||= Dir.pwd

    vars = {
      "PWD" => path
    }

    options = {
      chdir: path
    }

    unless File.directory?(path)
      FileUtils.mkdir_p(path)
    end

    @cmd_output = ""
    @cmd_status = 0

    Open3.popen3(vars, *cmd, options) do |stdin, stdout, stderr, wait_thr|
      @cmd_output << stdout.read
      @cmd_output << stderr.read
      @cmd_status = wait_thr.value.exitstatus
    end

    return @cmd_output, @cmd_status
  end
end
    eos
  end
end