Class: Pindo::Command

Inherits:
CLAide::Command
  • Object
show all
Includes:
Funlog::Mixin, Githelper, Pindoconfig::Mixin
Defined in:
lib/pindo/command.rb,
lib/pindo/command/env.rb,
lib/pindo/command/ios.rb,
lib/pindo/command/jps.rb,
lib/pindo/command/web.rb,
lib/pindo/command/repo.rb,
lib/pindo/command/gplay.rb,
lib/pindo/command/setup.rb,
lib/pindo/command/unity.rb,
lib/pindo/command/utils.rb,
lib/pindo/command/android.rb,
lib/pindo/command/web/run.rb,
lib/pindo/command/appstore.rb,
lib/pindo/command/ios/cert.rb,
lib/pindo/command/jps/bind.rb,
lib/pindo/command/gplay/iap.rb,
lib/pindo/command/ios/build.rb,
lib/pindo/command/jps/login.rb,
lib/pindo/command/utils/tag.rb,
lib/pindo/command/jps/resign.rb,
lib/pindo/command/jps/upload.rb,
lib/pindo/command/repo/clone.rb,
lib/pindo/command/repo/login.rb,
lib/pindo/command/utils/boss.rb,
lib/pindo/command/utils/icon.rb,
lib/pindo/command/ios/podlint.rb,
lib/pindo/command/ios/podpush.rb,
lib/pindo/command/jps/apptest.rb,
lib/pindo/command/jps/comment.rb,
lib/pindo/command/repo/create.rb,
lib/pindo/command/repo/search.rb,
lib/pindo/command/utils/tgate.rb,
lib/pindo/command/appstore/iap.rb,
lib/pindo/command/appstore/pem.rb,
lib/pindo/command/appstore/tag.rb,
lib/pindo/command/env/quarkenv.rb,
lib/pindo/command/env/swarkenv.rb,
lib/pindo/command/env/workhard.rb,
lib/pindo/command/gplay/itcapp.rb,
lib/pindo/command/gplay/upload.rb,
lib/pindo/command/ios/applovin.rb,
lib/pindo/command/jps/download.rb,
lib/pindo/command/utils/device.rb,
lib/pindo/command/utils/fabric.rb,
lib/pindo/command/utils/feishu.rb,
lib/pindo/command/appstore/cert.rb,
lib/pindo/command/ios/autobuild.rb,
lib/pindo/command/ios/podupdate.rb,
lib/pindo/command/web/autobuild.rb,
lib/pindo/command/gplay/metadata.rb,
lib/pindo/command/ios/autoresign.rb,
lib/pindo/command/unity/packinit.rb,
lib/pindo/command/unity/packpush.rb,
lib/pindo/command/utils/repoinit.rb,
lib/pindo/command/utils/xcassets.rb,
lib/pindo/command/appstore/itcapp.rb,
lib/pindo/command/appstore/upload.rb,
lib/pindo/command/env/dreamstudio.rb,
lib/pindo/command/unity/autobuild.rb,
lib/pindo/command/unity/packbuild.rb,
lib/pindo/command/utils/clearcert.rb,
lib/pindo/command/utils/renewcert.rb,
lib/pindo/command/utils/renewproj.rb,
lib/pindo/command/android/keystore.rb,
lib/pindo/command/appstore/itcinfo.rb,
lib/pindo/command/appstore/quswark.rb,
lib/pindo/command/gplay/pullconfig.rb,
lib/pindo/command/android/autobuild.rb,
lib/pindo/command/appstore/bundleid.rb,
lib/pindo/command/appstore/metadata.rb,
lib/pindo/command/appstore/quswauth.rb,
lib/pindo/command/gplay/screenshots.rb,
lib/pindo/command/android/autoresign.rb,
lib/pindo/command/appstore/autobuild.rb,
lib/pindo/command/utils/updateconfig.rb,
lib/pindo/command/appstore/adhocbuild.rb,
lib/pindo/command/appstore/autoresign.rb,
lib/pindo/command/appstore/configproj.rb,
lib/pindo/command/appstore/getitcinfo.rb,
lib/pindo/command/appstore/initconfig.rb,
lib/pindo/command/appstore/pullconfig.rb,
lib/pindo/command/appstore/screenshots.rb

Direct Known Subclasses

Android, Appstore, Env, Gplay, Ios, Jps, Repo, Setup, Unity, Utils, Web

Defined Under Namespace

Classes: Android, Appstore, Env, Gplay, Ios, Jps, Repo, Setup, Unity, Utils, Web

Constant Summary collapse

DEFAULT_ROOT_OPTIONS =
[
  ['--version', '查看pindo版本'],
]
DEFAULT_OPTIONS =
[
  ['--help',    '查看命令行用法'],
  ['--verbose', '显示详细的调试信息'],
]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Funlog::Mixin

#pindo_log_instance

Methods included from Pindoconfig::Mixin

#pindo_single_config

Methods included from Githelper

#add_branch, #add_tag, #add_tag_with_check, #clone_clang_repo, #clone_devclang_repo, #clone_pindo_common_config_repo, #clone_pindo_env_config_repo, #clong_buildconfig_repo, #get_repo_base_name, #getcode_to_dir, #git_addpush_repo, #git_latest_commit_id, #git_root_directory, #is_git_directory?, #local_branch_exists?, #local_tag_exists?, #prepare_gitenv, #process_need_add_files, #remote_branch_exists?, #remote_tag_exists?, #remove_branch, #remove_tag

Methods included from Executable

capture_command, #executable, execute_command, popen3, reader, which, which!

Constructor Details

#initialize(argv) ⇒ Command

Returns a new instance of Command.



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
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'lib/pindo/command.rb', line 131

def initialize(argv)
    super
    @args_help_flag = argv.flag?('help', false)
    @args_verbose_flag = argv.flag?('verbose', false)

    # 检查是否是 help 请求(检查原始命令行参数)
    original_args = ARGV.join(' ')
    is_help_request = @args_help_flag ||
                    original_args.include?('--help') ||
                    original_args.include?('-h') ||
                    argv.remainder.include?('--help') ||
                    argv.remainder.include?('-h')

    # 设置全局 verbose 标志
    ENV['PINDO_VERBOSE'] = '1' if @args_verbose_flag

    # 在非抽象命令初始化时设置上下文(但不在显示帮助时)
    if !self.class.abstract_command? && !is_help_request
        context = Pindo::PindoContext.instance

        # 只在上下文未设置时才设置(避免重复设置)
        if context.instance_variable_get(:@current_command).nil?
            # 获取完整的命令路径
            command_parts = []
            current = self.class
            while current < Pindo::Command
                if current.command && current.command != 'pindo'
                    command_parts.unshift(current.command)
                end
                current = current.superclass
            end
            command_name = command_parts.empty? ? self.class.command : command_parts.join(':')

            # 配置选项
            cache_enabled_value = self.class.respond_to?(:use_cache?) ? self.class.use_cache? : false
            options = {
                cache_enabled: cache_enabled_value,
                verbose: @args_verbose_flag
            }

            # 获取项目根目录(Git仓库根目录或当前目录)
            project_dir = get_project_root_directory(Dir.pwd)

            context.set_context(command_name, project_dir, options)
        end
    end
end

Instance Attribute Details

#args_help_flagObject Also known as: args_help_flag?

Returns the value of attribute args_help_flag.



52
53
54
# File 'lib/pindo/command.rb', line 52

def args_help_flag
  @args_help_flag
end

Class Method Details

.command_nameString

自动推导命令名称

Returns:

  • (String)

    命令名称,例如:Pindo::Command::Ios::Autobuild → ‘ios:autobuild’



69
70
71
72
73
74
75
76
# File 'lib/pindo/command.rb', line 69

def self.command_name
  @command_name ||= begin
    # 从类名推导,例如:
    # Pindo::Command::Ios::Autobuild → ['Ios', 'Autobuild'] → 'ios:autobuild'
    parts = name.split('::').drop(2)  # 去掉 'Pindo' 和 'Command'
    parts.map(&:downcase).join(':')
  end
end

.optionsObject

].concat(super) end



112
113
114
115
116
117
118
# File 'lib/pindo/command.rb', line 112

def self.options
  if root_command?
    DEFAULT_ROOT_OPTIONS + DEFAULT_OPTIONS
  else
    DEFAULT_OPTIONS
  end
end

.run(argv) ⇒ Object



125
126
127
128
129
# File 'lib/pindo/command.rb', line 125

def self.run(argv)
    # 直接调用父类的 run 方法
    # PindoContext 的设置在 initialize 中处理
    super(argv)
end

.use_cache?Boolean

缓存配置:子类可以重写此方法来启用缓存

Returns:

  • (Boolean)


61
62
63
# File 'lib/pindo/command.rb', line 61

def self.use_cache?
  false  # 默认不使用缓存
end

Instance Method Details

#initialize_options(argv, command_name: nil, directory: nil, enable_cache: nil) ⇒ OptionConfiguration

初始化参数(便捷方法)

Parameters:

  • argv (CLAide::ARGV)

    命令行参数

  • command_name (String, nil) (defaults to: nil)

    命令名称(可选,默认自动推导)

  • directory (String, nil) (defaults to: nil)

    工作目录(可选,默认当前目录)

  • enable_cache (Boolean, nil) (defaults to: nil)

    是否启用缓存(可选,默认使用 use_cache?)

Returns:

  • (OptionConfiguration)

    参数配置对象



84
85
86
87
88
89
90
91
92
93
# File 'lib/pindo/command.rb', line 84

def initialize_options(argv, command_name: nil, directory: nil, enable_cache: nil)
  Pindo::Options::OptionInitializer.initialize(
    self,
    argv,
    self.class.option_items,
    command_name || self.class.command_name,
    directory: directory,
    enable_cache: enable_cache.nil? ? self.class.use_cache? : enable_cache
  )
end

#validate!Object



120
121
122
123
# File 'lib/pindo/command.rb', line 120

def validate!
    super
    help! if args_help_flag?
end