2020-04-07 22:10:33 -08:00

143 lines
4.6 KiB
Python

import asyncio
import logging
import discord
from discord.ext import commands
from geeksbot.imports.checks import is_me
from geeksbot.imports.utils import Book, Paginator, run_command
git_log = logging.getLogger("git")
class Git(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.group(case_insensitive=True, invoke_without_command=True)
async def git(self, ctx):
"""Shows my Git link"""
branch = (
await asyncio.wait_for(
self.bot.loop.create_task(
run_command(
"git rev-parse --symbolic-full-name " "--abbrev-ref HEAD"
)
),
120,
)
).split("\n")[0]
url = f"{self.bot.git_url}/tree/{branch}"
em = discord.Embed(
title=f"Here is where you can find my code",
url=url,
color=self.bot.embed_color,
)
if branch == "master":
em.description = (
"I am Geeksbot. You can find my code here:\n" f"{self.bot.git_url}"
)
else:
em.description = (
f"I am the {branch} branch of Geeksbot. "
f"You can find the master branch here:\n"
f"{self.bot.git_url}/tree/master"
)
em.set_thumbnail(url=f"{ctx.guild.me.avatar_url}")
await ctx.send(embed=em)
@git.command()
@is_me()
async def pull(self, ctx):
"""Pulls updates from GitHub rebasing branch."""
pag = Paginator(self.bot, max_line_length=100, embed=True)
pag.set_embed_meta(
title="Git Pull",
color=self.bot.embed_color,
thumbnail=f"{ctx.guild.me.avatar_url}",
)
pag.add(
"\uFFF6"
+ await asyncio.wait_for(
self.bot.loop.create_task(run_command("git fetch --all")), 120
)
)
pag.add("\uFFF7\n\uFFF8")
pag.add(
await asyncio.wait_for(
self.bot.loop.create_task(
run_command(
"git reset --hard "
"origin/$(git "
"rev-parse --symbolic-full-name"
" --abbrev-ref HEAD)"
)
),
120,
)
)
pag.add("\uFFF7\n\uFFF8")
pag.add(
await asyncio.wait_for(
self.bot.loop.create_task(
run_command("git show --stat | " 'sed "s/.*@.*[.].*/ /g"')
),
10,
)
)
book = Book(pag, (None, ctx.channel, self.bot, ctx.message))
await book.create_book()
@git.command()
@is_me()
async def status(self, ctx):
"""Gets status of current branch."""
pag = Paginator(self.bot, max_line_length=44, max_lines=30, embed=True)
pag.set_embed_meta(
title="Git Status",
color=self.bot.embed_color,
thumbnail=f"{ctx.guild.me.avatar_url}",
)
result = await asyncio.wait_for(
self.bot.loop.create_task(run_command("git status")), 120
)
pag.add(result)
book = Book(pag, (None, ctx.channel, self.bot, ctx.message))
await book.create_book()
@git.command()
@is_me()
async def checkout(self, ctx, branch: str = "master"):
"""Checks out the requested branch.
If no branch name is provided will checkout the master branch"""
pag = Paginator(self.bot, max_line_length=44, max_lines=30, embed=True)
branches_str = await asyncio.wait_for(
self.bot.loop.create_task(run_command(f"git branch -a")), 120
)
existing_branches = [
b.strip().split("/")[-1]
for b in branches_str.replace("*", "").split("\n")[:-1]
]
if branch not in existing_branches:
pag.add(f"There is no existing branch named {branch}.")
pag.set_embed_meta(
title="Git Checkout",
color=self.bot.error_color,
thumbnail=f"{ctx.guild.me.avatar_url}",
)
else:
pag.set_embed_meta(
title="Git Checkout",
color=self.bot.embed_color,
thumbnail=f"{ctx.guild.me.avatar_url}",
)
result = await asyncio.wait_for(
self.bot.loop.create_task(run_command(f"git checkout -f {branch}")), 120
)
pag.add(result)
book = Book(pag, (None, ctx.channel, self.bot, ctx.message))
await book.create_book()
def setup(bot):
bot.add_cog(Git(bot))