用GoLand写一个小玩意-git定时push、commit

news2024/9/24 11:32:23

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党

背景

有时候你想刷一刷github的commit墙,或者公司需要每天提交代码,你想摸鱼。就有这么一个小需求,想要自动commitpush代码。

github实际这种轮子还是很多的,但是实现也很简单。我们就自己写一个耍耍吧

实现原理

最简单的方式

  1. 创建一个文件
  2. git add 文件
  3. 比如我们给文件添加一个空格
  4. git commit
  5. git push

大致就是这样一个流程。比如下次我们再提交就是移除空格

语言选择

java对于文件的读取和这种小工具编写起来还是有点麻烦。goland足够轻量,也友好的支持跨平台,所以我们就用goland写一下,顺带巩固巩固刚学没几天的goland

编码

package main

import (
	"flag"
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
	"strings"
	"time"
)

const (
	defaultPath     = "/Users/xiaozou/Desktop/sofe/java/weihubeats"
	defaultInterval = "10s"
	defaultJavaFile = "MQ.java"
	commitMsg       = "add test"
)

func main() {

	var projectPath, intervalStr string
	flag.StringVar(&projectPath, "path", defaultPath, "Path to the project")
	flag.StringVar(&intervalStr, "interval", defaultInterval, "Interval between commits (e.g., 30m, 2h)")
	flag.Parse()

	interval, err := time.ParseDuration(intervalStr)
	if err != nil {
		fmt.Println("Invalid interval format:", err)
		return
	}

	filePath := filepath.Join(projectPath, defaultJavaFile)

	if !checkFileExists(filePath) {
		err := os.WriteFile(filePath, []byte{}, 0644)
		if err != nil {
			fmt.Printf("Failed to create file %s: error: %s\n", defaultJavaFile, err)
			return
		}
		fmt.Printf("create file %s success/n", defaultJavaFile)

	}

	ticker := time.NewTicker(interval)
	defer ticker.Stop()

	addSpace := true

	for range ticker.C {
		if err := modifyFile(filePath, addSpace); err != nil {
			fmt.Println("Failed to modify file:", err)
			return
		}
		if addSpace {
			fmt.Println("add space success")

		} else {
			fmt.Println("remove space success")
		}

		if err := commitChanges(projectPath, commitMsg); err != nil {
			fmt.Println("Failed to commit changes:", err)
			return
		}
		fmt.Println("push git success")
		addSpace = !addSpace

	}

}

func checkFileExists(filePath string) bool {
	_, err := os.Stat(filePath)
	return !os.IsNotExist(err)

}

/*
*
追加空格
*/
func modifyFile(filePath string, addSpace bool) error {

	content, err := os.ReadFile(filePath)
	if err != nil {
		return err
	}

	var newContent string
	if addSpace {
		newContent = string(content) + " "
	} else {
		newContent = strings.TrimRight(string(content), " ")
	}
	return os.WriteFile(filePath, []byte(newContent), 0644)
}

func commitChanges(projectPath, message string) error {

	cmd := exec.Command("git", "add", ".")
	cmd.Dir = projectPath
	if err := cmd.Run(); err != nil {
		return err
	}

	cmd = exec.Command("git", "commit", "-m", message)
	cmd.Dir = projectPath
	if err := cmd.Run(); err != nil {
		return err
	}
	fmt.Printf("git commit success message: %s\n", message)
	cmd = exec.Command("git", "push", "origin", "master")
	cmd.Dir = projectPath
	return cmd.Run()
}


效果

总结

总得来说使用goland写一些工具类啥的还是很方便的,api和打包非常轻量。

比如文件的读取写入只需要一行代码搞定

		err := os.WriteFile(filePath, []byte{}, 0644)
        content, err := os.ReadFile(filePath)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1420759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

solr的原理是什么

1 Java程序里如果有无限for循环的代码导致CPU负载超高,如何排查? 排查Java程序中由于无限循环导致的CPU负载过高的问题,可以按照以下步骤进行: 资源监控: 使用系统命令行工具(如Linux上的top或htop&#xf…

Arrays.asList()方法调用add()或remove()抛出java.lang.UnsupportedOperationException问题

在使用Arrays.asList方法将以,分割的字符串转为list集合时,调用add和remove等方法时会抛出java.lang.UnsupportedOperationException。以下为原因和解决方法。 原因: Arrays.asList()方法返回了一个Arrays类的一个继承了AbstractList的ArrayList内部类…

富文本编辑器CKEditor4简单使用-03(图片上传)

富文本编辑器CKEditor4简单使用-03(图片上传) 1. 前言1.1 关于CKEditor4的安装及简单使用1.2 关于CKEditor4的插件安装及使用1.3 关于Easy Image 2. CKEditor4自带的默认上传图片按钮功能3. 使用增强的图像插件3.1 什么是增强的图像插件3.2 下载并安装增…

jdk17新特性—— instanceof的模式匹配

目录 一、instanceof模式匹配的概述二、instanceof模式匹配代码示例2.1、jdk17之前 instanceof用法 代码示例2.2、jdk17及之后 instanceof用法 代码示例一2.3、jdk17及之后 instanceof用法 代码示例二 一、instanceof模式匹配的概述 instanceof增加了模式匹配功能,…

vue3之echarts3D环柱图-间隔版

vue3之echarts3D环柱图-间隔版 效果&#xff1a; 版本 "echarts": "^5.4.1", "echarts-gl": "^2.0.9" 核心代码&#xff1a; <template><div class"content"><div ref"eCharts" class"c…

分享4款不能错过的修改照片尺寸的软件!

在当今这个数字化时代&#xff0c;照片已经成为我们分享生活、表达观点的重要方式。但是&#xff0c;你是否曾遇到过这样的问题&#xff1a;一张精美的照片因为尺寸不合适而无法在朋友圈中展现出最佳效果&#xff1f;不用担心&#xff0c;今天我们就来聊聊那些可以帮助你轻松修…

Day02-课后练习2-参考答案(数据类型和运算符)

文章目录 巩固题1、案例&#xff1a;今天是周2&#xff0c;100天以后是周几&#xff1f;2、案例&#xff1a;求三个整数x,y,z中的最大值3、案例&#xff1a;判断今年是否是闰年4、分析如下代码的计算结果5、分析如下代码的计算结果6、分析如下代码的计算结果7、分析如下代码的计…

Real power also called true or active power

Real power also called true or active power flyfish 三相电路的总功率都等于各相功率之和&#xff0c;任意相的有功功率等于该相的相电压乘以相电流&#xff0c;再乘以该相负载的功率因数。 P P A P B P C PP_AP_BP_C PPA​PB​PC​ P有功功率&#xff0c;瓦特(W) U电压…

Springboot 实现基于用户和物品的协同过滤算法

目录 简介 协同过滤算法(简称CF) 算法详解 算法使用 基于用户 基于物品 总结 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入工作的漩涡&#xff0c;忘记了停…

简单线性Dp

文章目录 线性Dp的定义AcWing 898. 数字三角形思路CODE正序倒序 AcWing 895. 最长上升子序列Dp 分析CODE AcWing 897. 最长公共子序列Dp 分析CODE 线性Dp的定义 处理起来是线性的&#xff08;&#xff1f;&#xff1f;&#xff1f;&#xff09;&#xff0c;这部分交给ai老先生…

Gurobi输出日志文件的解读【Gurobi】

本章来解读一下Gurobi的刷屏式输出&#xff0c;根本不需要cout&#xff0c;直接通过model.optimize();进行输出。 例如&#xff1a; 现在我们来逐行解读一下&#xff1a; 第一部分&#xff1a;版本型号 可以直接跳过 CPU model: 12th Gen Intel(R) Core(TM) i5-12500H, instr…

【EI会议征稿通知】第五届计算机信息和大数据应用国际学术会议(CIBDA 2024)

第五届计算机信息和大数据应用国际学术会议&#xff08;CIBDA 2024&#xff09; 2024 5th International Conference on Computer Information and Big Data Applications 第五届计算机信息和大数据应用国际学术会议&#xff08;CIBDA 2024&#xff09;将于2024年3月22-24日在…

Google Chrome 中出现 ERR_SSL_KEY_USAGE_INCOMPATIBLE 错误

证书的方式发生了变化&#xff0c;出现了这个新错误&#xff0c;导致我无法浏览该网站。 可以右键属性获取位置 关闭导航器chrome并转到文件夹&#xff0c;找到Local State文件并删除 执行指令结束进程&#xff0c;重新打开浏览器即可 taskkill /im "chrome.exe"…

基于C#制作一个俄罗斯方块小游戏

目录 引言游戏背景介绍游戏规则游戏设计与实现开发环境与工具游戏界面设计游戏逻辑实现游戏优化和测试性能优化测试工具和流程说明引言 俄罗斯方块是一款经典的益智游戏,深受玩家喜爱。本文将介绍如何使用C#编程语言制作一个简单的俄罗斯方块小游戏,并探讨其设计与实现过程。…

TOFU: A Two-Step Floorplan Refinement Framework for Whitespace Reduction

TOFU: A Two-Step Floorplan Refinement Framework for Whitespace Reduction 目录 摘要一、简介二、准备工作2.1 布局规划2.2 基于约束图的合法化 3 提出的算法A 概况B 平面图合法化1&#xff09;约束图构造&#xff1a; C 两步空白删除框架1.基于位置的模块2. 基于区域重新分…

利用二分法及不动点迭代求解非线性方程(MatLab)

一、问题描述 利用二分法及不动点迭代求解非线性方程。 二、实验目的 掌握二分法及不动点迭代的算法原理&#xff1b;能分析两种方法的收敛性&#xff1b;能熟练编写代码实现利用二分法及不动点迭代来求解非线性方程。 三、实验内容及要求 二分法 (1) 编写代码计算下列数字…

华为配置小型网络WLAN 的基本业务示例

配置小型网络WLAN基本业务示例 组网图形 图1 配置小型网络WLAN基本业务组网图 小型WLAN网络简介配置注意事项组网需求数据规划配置思路操作步骤配置文件 小型WLAN网络简介 本文介绍的WLAN网络是指利用频率为2.4GHz或5GHz的射频信号作为传输介质的无线局域网&#xff0c;相对于有…

Vue-43、Vue中组件自定义事件

1、给学生绑定atguigu事件 2、在组件内触发事件 第二种写法 传多个参数。 解绑 解绑一个事件 解绑多个自定义事件 this.$off([xxx1,xxx2]);解绑所有事件 this.$off();总结

一文速学-selenium高阶操作连接已存在浏览器

前言 不得不说selenium不仅在自动化测试作为不可或缺的工具&#xff0c;在数据获取方面也是十分好用&#xff0c;能够十分快速的见到效果&#xff0c;这都取决于selenium框架的足够的灵活性&#xff0c;甚至在一些基于web端的自动化办公都十分有效。 通过selenium连接已经存在…

【活动回顾】CMeet 成都:转鸿蒙 对应用开发来说是否是职业发展新机会 - 圆满结束!

文章目录 前言一、活动介绍二、精彩分享内容及活动议程2.1、《COC 成都社区情况和活动介绍》2.2、“匿”问我答&#xff0c;现场互动2.3、《话题一&#xff1a;升职加薪》2.4、《话题二&#xff1a;说说鸿蒙》2.5、2023 CSDN 1024 程序员节成都站贡献人物表彰2.6、《话题三&…