<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -207,6 +207,14 @@ module TicGit
         end
       end
     end
+
+    def ticket_assign(new_assigned = nil, ticket_id = nil)
+      if t = ticket_revparse(ticket_id)
+        ticket = TicGit::Ticket.open(self, t, @tickets[t])
+        ticket.change_assigned(new_assigned)
+        reset_ticgit
+      end
+    end
     
     def ticket_checkout(ticket_id)
       if t = ticket_revparse(ticket_id)</diff>
      <filename>lib/ticgit/base.rb</filename>
    </modified>
    <modified>
      <diff>@@ -33,6 +33,8 @@ module TicGit
         handle_ticket_list
       when 'state'
         handle_ticket_state
+      when 'assign'
+        handle_ticket_assign
       when 'show'
         handle_ticket_show
       when 'new'
@@ -172,6 +174,28 @@ module TicGit
       tic.tic_states.include?(state)
     end
     
+    # Assigns a ticket to someone
+    #
+    # Usage:
+    # no arguments
+    #   The currently checked out ticket is assigned to the current user
+    # 1 argument [#name#]
+    #   The currently checked out ticket is assigned to the specified user
+    # 2 arguments [#name# #ticid#]
+    #   The ticket with the given ID is assigned to the specified user
+    def handle_ticket_assign
+      if ARGV.size &gt; 2
+        tid = ARGV[1].chomp
+        new_assigned = ARGV[2].chomp
+        tic.ticket_assign(new_assigned, tid)
+      elsif ARGV.size &gt; 1
+        new_assigned = ARGV[1].chomp
+        tic.ticket_assign(new_assigned)
+      else
+        tic.ticket_assign
+      end
+    end
+
     ## LIST TICKETS ##
     def parse_ticket_list
       @options = {}
@@ -341,7 +365,7 @@ module TicGit
     def parse_options! #:nodoc:      
       if args.empty?
         warn &quot;Please specify at least one action to execute.&quot;
-        puts &quot; list state show new checkout comment tag &quot;
+        puts &quot; list state show new checkout comment tag assign &quot;
         exit
       end
 </diff>
      <filename>lib/ticgit/cli.rb</filename>
    </modified>
    <modified>
      <diff>@@ -133,6 +133,20 @@ module TicGit
         base.git.commit(&quot;added state (#{new_state}) to ticket #{ticket_name}&quot;)
       end
     end
+
+    def change_assigned(new_assigned)
+      new_assigned ||= email
+      return false if new_assigned == assigned
+
+      base.in_branch do |wd|
+        Dir.chdir(ticket_name) do
+          base.new_file('ASSIGNED_' + new_assigned, new_assigned)
+        end
+        base.git.remove(File.join(ticket_name,'ASSIGNED_' + assigned))
+        base.git.add
+        base.git.commit(&quot;assigned #{new_assigned} to ticket #{ticket_name}&quot;)
+      end
+    end
     
     def add_tag(tag)
       return false if !tag</diff>
      <filename>lib/ticgit/ticket.rb</filename>
    </modified>
    <modified>
      <diff>@@ -40,6 +40,30 @@ describe TicGit::Base do
     tic.state.should_not eql('resolve')
   end
 
+  it &quot;should be able to change to whom the ticket is assigned&quot; do
+    tic = @ticgit.ticket_list.first
+    @ticgit.ticket_assign('pope', tic.ticket_id)
+    tic = @ticgit.ticket_show(tic.ticket_id)
+    tic.assigned.should eql('pope')
+  end
+
+  it &quot;should not be able to change to whom the ticket is assigned if it is already assigned to that user&quot; do
+    tic = @ticgit.ticket_list.first
+    tic_id = tic.ticket_id
+    lambda {
+      @ticgit.ticket_assign(tic.assigned, tic_id)
+      @ticgit.ticket_show(tic_id)
+    }.should_not change(@ticgit.ticket_recent(tic_id), :size)
+  end
+
+  it &quot;should default to the current user when changing to whom the ticket is assigned&quot; do
+    tic = @ticgit.ticket_list.first
+    @ticgit.ticket_checkout(tic.ticket_id)
+    @ticgit.ticket_assign()
+    tic = @ticgit.ticket_show(tic.ticket_id)
+    tic.assigned.should eql(tic.email)
+  end
+
   it &quot;should only show open tickets by default&quot; do
     @ticgit.ticket_new('my third ticket')
     tics = @ticgit.ticket_list</diff>
      <filename>spec/base_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>112e4272d6fb5c48b7f7cffee93129d33adb9f78</id>
    </parent>
  </parents>
  <author>
    <name>Adam</name>
    <email>pope@shifteleven.com</email>
  </author>
  <url>http://github.com/schacon/ticgit/commit/247110b08d998db2608a4517f69e89ca028055c1</url>
  <id>247110b08d998db2608a4517f69e89ca028055c1</id>
  <committed-date>2008-05-10T09:12:29-07:00</committed-date>
  <authored-date>2008-05-10T09:12:29-07:00</authored-date>
  <message>Added the ability to change to whom a ticket is assigned.

From the command line:
  ti assign
  ti assign anon
  ti assign anon 3</message>
  <tree>c54c0a2730ff2c536bacfdd8e3356f2ed2e844d4</tree>
  <committer>
    <name>Adam</name>
    <email>pope@shifteleven.com</email>
  </committer>
</commit>
