ruby/rubygems · error · Gem::Package::TooLongFileName

File "# " has a too long path (should be 256 or less)

Error message

File "#{name}" has a too long path (should be 256 or less)

What it means

Error "File "#{name}" has a too long path (should be 256 or less)" thrown in ruby/rubygems.

Solutions

  1. Shorten the file's full path to 256 characters or fewer and rebuild the gem

When it happens

Trigger: Thrown at lib/rubygems/package/tar_writer.rb:308 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of ruby/rubygems@86cbb817a3 (2026-08-23). Data as JSON: /api/errors/b98c6ff0db22af74. Report an issue: GitHub.

Appendix: source

Thrown at lib/rubygems/package/tar_writer.rb:308

    name, prefix = split_name(name)

    header = Gem::Package::TarHeader.new name: name, mode: mode,
                                         typeflag: "5", size: 0,
                                         prefix: prefix,
                                         mtime: Gem.source_date_epoch

    @io.write header

    self
  end

  ##
  # Splits +name+ into a name and prefix that can fit in the TarHeader

  def split_name(name) # :nodoc:
    if name.bytesize > 256
      raise Gem::Package::TooLongFileName.new("File \"#{name}\" has a too long path (should be 256 or less)")
    end

    prefix = ""
    if name.bytesize > 100
      parts = name.split("/", -1) # parts are never empty here
      name = parts.pop            # initially empty for names with a trailing slash ("foo/.../bar/")
      prefix = parts.join("/")    # if empty, then it's impossible to split (parts is empty too)
      while !parts.empty? && (prefix.bytesize > 155 || name.empty?)
        name = parts.pop + "/" + name
        prefix = parts.join("/")
      end

      if name.bytesize > 100 || prefix.empty?
        raise Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long name (should be 100 or less)")
      end

      if prefix.bytesize > 155
        raise Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long base path (should be 155 or less)")

View on GitHub (pinned to 86cbb817a3)