refs

in lib/grit/git-ruby.rb [115:148]


    def refs(options, prefix)
      refs = []
      already = {}
      orig_prefix = prefix
      prefix = File.join @git_dir, prefix

      files = Dir.glob(prefix + '/**/*')
      files.each do |ref|
        next if !File.file?(ref)
        id = File.read(ref).chomp
        name = ref.sub("#{prefix}/", '')
        if !already[name]
          refs << "#{name} #{id}"
          already[name] = true
        end
      end

      packed = File.join(@git_dir, 'packed-refs')
      if File.file?(packed)
        File.readlines(packed).each do |line|
          if m = /^(\w{40}) (.*?)$/.match(line)
            next if !Regexp.new('^' + orig_prefix).match(m[2])
            name = m[2].sub("#{orig_prefix}/", '')
            if !already[name]
              refs << "#{name} #{m[1]}"
              already[name] = true
            end
          end
        end
      end

      refs.join("\n")
    end